Android 11 上如何获取已安装应用列表

访客 247 0
在Android 11上,我们可以观察到许多更新都是为了保护隐私。如果您的应用程序使用PackageManager方法来获取已安装的应用程序列表,那么在Android 11上需要进行一些修改。

让我们来研究一下获取应用列表的代码,看看它是否与你的代码非常相似。

List<ApplicationInfo> allApps = getPackageManager().getInstalledApplications(0);for(ApplicationInfo ai : allApps) {      Log.d("packageName", ai.packageName); }

现在你是在11上使用,代码即使一样,除非你在AndroidManifest.xml中添加代码,否则是不会生效的。

让我们来看看,有三种不同的途径可以查询已安装的应用程序。

包名查询

如果你已经掌握了欲查询应用的包名,那么你可以按照以下方式进行操作。

<manifest xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    package="com.blowing.demo">
    <queries>
        <intent-filter>
            <action android:name=android.intent.action.MAIN />
            </intent-filter>
        </queries></manifest>

通过intent filter查询

如果您不知道应用的包名,只是想查询具有某种功能的应用,那么可以使用以下方式:

    
    
        
            
            
        
    


需要注意的是: 
  • <intent> 中只能有一个<action> 元素
  • <data>中也只能有这些属性: mimeType,scheme 和host

查询所有的应用

11上添加了一个QUERY_ALL_PACKAGES这样的权限,我们配置上就ok了

如果我们使用android.intent.action.MAIN作为action元素,即使不添加权限也可以绕过,因为几乎所有应用都会有这个action。不确定是否算作bug。

标签: 代码 列表 元素 权限

发表评论 (已有0条评论)

还木有评论哦,快来抢沙发吧~