Android不同版本读取已安装应用列表权限相关问题

转载自:https://blog.csdn.net/u010844304/article/details/111044338

如何在Android 11 上获取已安装应用列表在Android 11上,我们可以看到很多的更新都是用来保护隐私的,如果你的app 在使用PackageManger的方法来获取安装的应用列表,

那么在Android11上,就需要做一点改变了。

我们来看看一下获取应用列表的代码,会不会和你的很相似

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

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

这里有3种不同的方法去查询已经安装的app,让我们瞧瞧

包名查询
如果你已经知道想查询的应用包名,那么你可以这样做

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    package="com.blowing.demo"
    <queries>
        <package android:name="com.android.settings"/>
        <package android:name="com.blowing.test"/>
    </queries>
</manifest>

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

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    package="com.blowing.demo"
    <queries>
        <intent>
             <action android:name="android.intent.action.SEND"/>
             <data android:mimeType="image/png"/>
        </intent>
    </queries>
</manifest>

这里需要注意的是:

  • intent 中只能有一个action元素
  • data中也只能有这些属性: mimeType,scheme 和host

查询所有的应用
11上添加了一个QUERY_ALL_PACKAGES这样的权限,我们配置上就ok了

<uses-permission android:name="android.permission.QUERY_ALL_PACKAGES"/>

如果我们使用android.intent.action.MAIN 作为action元素,那么不添加权限,也是可以绕过去的,因为几乎所有应用都会有这个action。不知道这个算不算是bug了。

转载自:https://www.jianshu.com/p/dee8bc1fb847

首先的问题是:Android “读取已安装应用列表”需要申请权限吗?

这里我先公布下答案:不需要

一个app无非实现一个团队或个人的商业价值和潜在可能,要是规模大的app,这种特征就非常明显。简而言之,这种权限请求无非三种需求

  • 应用市场类,垃圾清理类,杀毒安全类,请求理由是检查应用是否需要升级、清理、杀毒,这种请求无可厚非,可以支持!
  • 部分app需要调用外部(其他)app,比如说文件管理类app就需要知道哪些应用可以打开哪些文件,这种请求可以可以理解,但是完全可以避免,当然,请求也没什么问题!
  • 这方便不同应用间互相进行唤醒
  • add:添加一种情况,就是app使用第三方服务(比如Tencent x5,我不相信它会忍住不叫小伙伴起来嗨,细节我没研究过但是道理大家都懂)

结论就是,国内部分厂商比如华为、oppo,他们将”获取用户已安装应用列表”的权限暴露给了用户,让用户可以自由决定允许或者禁止应用访问该信息。同时,这个权限类似于附加的默认权限,一旦app声明了任何权限,那么”读取已安装应用列表”的权限也会被附加进来。但这个权限也不是太敏感,所以对于用户是无感知的。这里的无感知指的是不会在应用中去主动让我们弹窗申请权限,手机管家弹出的通知不算。

转载自:https://blog.csdn.net/xiao5678yun/article/details/81809795

Android权限GET_TASKS问题

Android 5.0开始,Google开始对getRunningTasks和getRecentTasks等接口进行限制使用,默认情况下,普通的第三方应用(非系统应用)不能使用该接口。之前,只要声明android.permission.GET_TASKS权限,开发的应用就可以使用getRunningTasks等接口。但从5.0开始,这种方式已经废弃,应用要使用该接口必须声明权限android.permission.REAL_GET_TASKS,而这个权限是不对三方应用开放的(在Manifest里申请了也没有作用),只有系统应用(有系统签名)可以调用该权限。

你可能感兴趣的:(数据安全,个人信息保护)