Как получить список установленных приложений в 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. Давайте посмотрим на них:

Запросить определенные пакеты

Если вы уже знаете, какие приложения вы хотите запросить, просто укажите имена пакетов внутри элемента в. <queries> 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"/>

В идеале следует запрашивать наименьшее количество пакетов и уважать конфиденциальность пользователя. В большинстве случаев это разрешение не требуется, только для таких приложений, как пусковые установки, имеет смысл запрашивать у пользователя разрешение на запрос всех установленных приложений на его телефоне.

ВВЕРХ