如何获取 Android 11 中已安装应用程序的列表

Posted

技术标签:

【中文标题】如何获取 Android 11 中已安装应用程序的列表【英文标题】:How to get a list of installed apps in Android 11 【发布时间】:2021-07-15 07:11:11 【问题描述】:

这行在开发者网站上有描述,但我没有完全理解

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

其实我需要测试Testing package visibility behavior

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

【问题讨论】:

【参考方案1】:

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

    如果您已经知道要查询哪些应用程序,只需提及 <queries> 元素中的包名称 AndroidManifest
<manifest package="com.nikit.app">
    <queries>
        <package android:name="com.fake.app" />
        <package android:name="com.fake.game" />
    </queries>
    ...
</manifest>
    如果您不知道您安装的应用程序的所有软件包名称 想查询,但有一组具有类似功能的应用程序 你想查询然后你可以在里面使用一个意图过滤器 &lt;queries&gt; 元素根据您的要求,就像它一样 在下面的代码 sn-p 中完成。
<manifest package="com.nikit.app">
    <queries>
        <intent>
            <action android:name="android.intent.action.SEND" />
            <data android:mimeType="image/jpeg" />
        </intent>
    </queries>
    ...
</manifest>

&lt;intent&gt; 元素看起来像&lt;intent-filter&gt;,但几乎没有区别。元素有以下限制:

&lt;intent&gt; 元素只能有一个 &lt;action&gt; 元素。 元素只能有以下属性:mimeType, schemehost
    如果你想像以前一样查询用户的所有应用 之前,您需要在 AndroidManifest。这是一个normal 权限,它会尽快被授予 随着应用的安装。
<uses-permission android:name="android.permission.QUERY_ALL_PACKAGES"/>

【讨论】:

谢谢@shirley!但我有一个疑问,根据开发者网站 QUERY_ALL_PACKAGES 不推荐link,有什么副作用吗? hi@ajay bisaveni,关于这个也许你可以参考这个link

以上是关于如何获取 Android 11 中已安装应用程序的列表的主要内容,如果未能解决你的问题,请参考以下文章

WifiManager 中的 startScan() 在 Android P 中已弃用

修改Android中已有的联系人

安装应用程序时如何获取用户的android版本,名称? [复制]

从android中的应用程序名称获取包名称[重复]

如何在运行时检查 Django 中已安装应用程序的版本?

Android 11,获取已安装应用的包名,和应用名