Как получить список установленных приложений в Android 11

#android #android-package-managers #android-11 #android-update-app

#Android #android-менеджеры пакетов #android-11 #android-обновление-приложение

Вопрос:

Эта строка описана на сайте разработчика, но я не совсем ее понял

 Call getInstalledApplications() or getInstalledPackages(). Both methods should return a filtered list.
 

На самом деле, мне нужно протестировать Testing package visibility behavior

https://developer.android.com/training/package-visibility/testing

Ответ №1:

Существует 3 различных способа запроса установленных приложений пользователя в Android 11.

  1. Если вы уже знаете, какие приложения вы хотите запросить, просто укажите имена пакетов внутри <queries> элемента в AndroidManifest .
 <manifest package="com.nikit.app">
    <queries>
        <package android:name="com.fake.app" />
        <package android:name="com.fake.game" />
    </queries>
    ...
</manifest>
 
  1. Если вы не знаете всех имен пакетов приложений, которые
    хотите запросить, но есть набор приложений с аналогичной функциональностью
    , которые вы хотите запросить, вы можете использовать фильтр намерений внутри
    <queries> элемента в соответствии с вашими требованиями, как это было
    сделано в приведенном ниже фрагменте кода.
 <manifest package="com.nikit.app">
    <queries>
        <intent>
            <action android:name="android.intent.action.SEND" />
            <data android:mimeType="image/jpeg" />
        </intent>
    </queries>
    ...
</manifest>
 

<intent> Элемент выглядит так <intent-filter> , но есть несколько отличий. элемент имеет следующие ограничения:

  • <intent> Элемент может иметь только один <action> элемент.
  • Элемент может иметь только следующие атрибуты : mimeType , scheme и host .
  1. Если вы хотите запросить все приложения пользователя, как вы делали ранее, вам необходимо включить QUERY_ALL_PACKAGES разрешение в AndroidManifest . Это normal разрешение, и оно предоставляется сразу после установки приложения.
 <uses-permission android:name="android.permission.QUERY_ALL_PACKAGES"/>
 

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

1. СПАСИБО @shirley! но у меня есть сомнения в соответствии с сайтом разработчика QUERY_ALL_PACKAGES не рекомендуется ссылка , есть ли какие-либо побочные эффекты?

2. привет @ajay bisaveni, об этом, возможно, вы можете обратиться по этой ссылке

3. @shirley В 1-м подходе, о котором вы упомянули, что, если я захочу добавить более 20 имен пакетов? Есть ли лучший способ сделать это? например, wild card или что-то вроде com.example.*