#android #android-intent
Вопрос:
Как узнать, будет ли заранее дан ответ на намерение, которое я собираюсь опубликовать?
После создания намерения я попробовал это, но это не сработало:
Intent fc = ....
PackageManager manager = context.getPackageManager();
List<ResolveInfo> list = manager.queryIntentActivities(fc, 0);
startActivityForResult(fc, 1);
Несмотря на то, что list
в нем 0 элементов, приложение было открыто по намерению.
Комментарии:
1. С какой версией Android вы тестировали? Если ответ-Android 11 или выше, есть ли у вас
<queries>
в манифесте элемент, касающийся правил видимости пакетов ?2. Android 11. Да, ты попал в точку. Спасибо!
Ответ №1:
На Android 11 и выше, чтобы использовать многие (большинство?) методов PackageManager
, вам нужно иметь <queries>
в манифесте элемент, определяющий приложения (или критерии для приложений), которые вы хотите найти с помощью PackageManager
. Без этого <queries>
элемента правила видимости пакетов ограничат ваши результаты вашим собственным приложением и некоторыми системными приложениями.
Ответ №2:
Или установите MATCH_ALL, чтобы предотвратить любую фильтрацию результатов
публичный статический финал int MATCH_ALL = 131072;
Есть еще несколько флагов, которые нужно попробовать. Замените 0 на другие.
Комментарии:
1. Пробовал несколько, в частности,
PackageManager.MATCH_ALL
. Ничего не сработало.