Android R Preview 1 представил новое разрешение под названием QUERY_ALL_PACKAGES . В документации к разрешению сказано следующее:
Разрешает запрос любого обычного приложения на устройстве, независимо от деклараций манифеста.
Кто-нибудь понял, что это на самом деле?
Я пробовал запустить на образе эмулятора следующее, и разрешение не повлияло ни на один из них:
- packageManager.queryIntentActivities(intent, 0)
- packageManager.getInstalledPackages(0)
user238753 14 мар ’20 в 07:19 2020-03-14 07:19
2020-03-14 07:19
4 ответа
Они покрывают это больше теперь, когда DP2 отсутствует.
Хотя я еще не тестировал этот аспект R DP2, похоже, что теперь ваше приложение не может узнать, какие еще приложения установлены, в целом. Приведенный пример queryIntentActivities() , но чтобы это действительно сработало, вам придется серьезно провести лоботомию PackageManager . Вы можете занести в белый список определенные пакеты и определенные структуры, чтобы попытаться обойтись этим в определенных случаях использования. И вот где загадочный QUERY_ALL_PACKAGES Разрешение, видимое в DP1, вступает в игру — это разрешение снимает эти новые ограничения. Учитывая предостережение «Ищите Google Play, чтобы предоставить рекомендации для приложений, которым требуется это разрешение», безопаснее всего предположить, что если вы попытаетесь его использовать, в конечном итоге вы будете забанены ботом в Play Store.
Итак, вы можете захотеть повторить свои эксперименты на DP2. Я планирую сделать то же самое в ближайшие недели.
Request Install Package Permission Removed
user115145 20 мар ’20 в 02:39 2020-03-20 02:39
2020-03-20 02:39
Даже когда разрешение QUERY_ALL_PACKAGES добавлен, вам еще нужно добавить фильтр к вашему AndroidManifest .
Например, для приложения запуска это может быть:
user7658607 08 мар ’21 в 10:52 2021-03-08 10:52
2021-03-08 10:52
В Android 11 внесены изменения, связанные с видимостью пакетов. Эти изменения влияют на приложения, только если они нацелены на Android 11. Дополнительные сведения об этих изменениях см. В руководствах по видимости пакетов на Android.
В моем случае Cordova-android 10.1.1, targetSdkVersion 30
user7889763 08 окт ’21 в 06:41 2021-10-08 06:41
2021-10-08 06:41
Если приложение пытается связаться с другим приложением, это разрешение следует добавить для Android 11+, иначе эти приложения не будут работать / запускаться.
Источник: stackru.com
Как добавить в manifest разрешение QUERY_ALL_PACKAGES
В документации говориться добавить разрешение в манифест, чтобы получить все установленные приложения на устройстве начиная с Android 11 и выше, я добавил но подчеркивает красным и пишет
A declaration should generally be used instead of QUERY_ALL_PACKAGES; see https://g.co/dev/packagevisibility for details
Query all packages permission
Что я делаю не так ?
Отслеживать
17.8k 11 11 золотых знаков 24 24 серебряных знака 51 51 бронзовый знак
задан 25 янв в 13:35
1 1 1 бронзовый знак
2 ответа 2
Сортировка: Сброс на вариант по умолчанию
Android 11 и выше используют новую систему разрешений, которая называется «Declarations». Вместо разрешения QUERY_ALL_PACKAGES надо использовать объявление packageVisibility.
На месте com.example.mypackage укажите имя вашего пакета.
После этого, нужно запросить разрешение packageVisibility у пользователя при запуске приложения, с помощью метода requestPermissions().
Источник: ru.stackoverflow.com
Как получить список установленных приложений в Android 11
В Android 11 мы видим множество обновлений, улучшающих конфиденциальность. Если ваше приложение использует эти методы для получения списка установленных приложений на устройстве пользователя, вам придется внести некоторые изменения в свой код для устройств, использующих Android 11. В этом сообщении блога мы обсудим все наши варианты.
Если вы уже запрашиваете приложения, установленные пользователем, следующий фрагмент кода будет вам знаком. Так вы можете получить список установленных приложений пользователя.
val packages = packageManager.getInstalledApplications(PackageManager.GET_META_DATA) for (packageInfo in packages) Log.d(TAG, «Package name:» + packageInfo.packageName) >
Теперь для ваших пользователей, использующих Android 11, код останется прежним, но он не будет работать, если вы не добавите дополнительные элементы в AndroidManifest.
Существует 3 различных способа запроса установленных пользователем приложений в Android 11. Давайте посмотрим на них:
Запросить определенные пакеты
Если вы уже знаете, какие приложения вы хотите запросить, просто укажите имена пакетов внутри элемента в. AndroidManifest
manifest package=»ru.inceptive.app»> queries> package android_name=»com.fake.app» /> package android_name=»com.fake.game» /> queries> . manifest>
Запрос с использованием фильтра намерений
Если вы не знаете все имена пакетов приложений, которые вы хотите запросить, но есть набор приложений с аналогичными функциями, которые вы хотите запросить, вы можете использовать фильтр намерений внутри элемента в соответствии с вашими требованиями, например было сделано в приведенном ниже фрагменте кода.
manifest package=»ru.inceptive.app»> queries> intent> action android_name=»android.intent.action.SEND» /> data android_mimeType=»image/jpeg» /> intent> queries> . manifest>
Элемент выглядит так, но есть несколько отличий. элемент имеет следующие ограничения:
Запросить все приложения
Если вы хотите запросить все приложения пользователя, как делали раньше, вам необходимо включить разрешение в файл. Это разрешение, и оно предоставляется, как только приложение будет установлено. QUERY_ALL_PACKAGES
uses-permission android_name=»android.permission.QUERY_ALL_PACKAGES»/>
В идеале следует запрашивать наименьшее количество пакетов и уважать конфиденциальность пользователя. В большинстве случаев это разрешение не требуется, только для таких приложений, как пусковые установки, имеет смысл запрашивать у пользователя разрешение на запрос всех установленных приложений на его телефоне.
Теги:
- Как получить список установленных приложений в Android 11
- Android 11
Источник: inceptive.ru