10

此行在开发人员网站上有所描述,但我并不完全理解

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

其实我需要测试Testing package visibility behavior

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

4

1 回答 1

15

在 Android 11 中有 3 种不同的方式来查询用户已安装的应用程序。

  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>
  • 该元素只能具有以下属性mimeTypeschemehost
  1. 如果你想像之前一样查询用户的所有应用程序,你需要QUERY_ALL_PACKAGESAndroidManifest. 这是一种normal权限,一旦安装应用程序就会被授予。
<uses-permission android:name="android.permission.QUERY_ALL_PACKAGES"/>
于 2021-04-21T06:07:18.250 回答