Проверьте, есть ли приложение, которое слушает мои намерения

#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 на другие.

https://developer.android.com/reference/android/content/pm/PackageManager#queryIntentActivities(android.content.Намерение, %)

Комментарии:

1. Пробовал несколько, в частности, PackageManager.MATCH_ALL . Ничего не сработало.