Android App安装列表获取

目录

前言

实现方案

方案概述

[一、 AndroidManifest 三种配置方式](#一、 AndroidManifest 三种配置方式)

1、方案一(权限:不建议使用)

2、方案二(白名单:如果白名单在1000以内,建议使用,1000及以上不建议使用)

3、方案三(action:建议使用)

二、API代码

1、方案一(已废弃方案,Android15以下)

优点:

缺点:

[2、方案二 (建议使用,但获取到的app列表比较少,大部分非系统应用都可以获取,超过半数的系统应用获取不到),与action配合使用,也可以action与白名单混合使用](#2、方案二 (建议使用,但获取到的app列表比较少,大部分非系统应用都可以获取,超过半数的系统应用获取不到),与action配合使用,也可以action与白名单混合使用)

优点:

缺点:

总结


前言

Android 系统在 Android11时,对获取app列表方案做了很大调整,需要对Android 11上下版本兼容,尤其是Android15上做出了大的变动。

实现方案

方案概述

获取app安装列表,主要有两个地方代码需要配置:

一、在AndroidManifest.xml中添加配置,配置分为权限、白名单、action 三种

二、在使用前面任意一种配置后,通过API(Java or Kotlin代码)获取安装列表,也有两种API可使用

一、 AndroidManifest 三种配置方式

1、方案一(权限:不建议使用)

权限配置:

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

2、方案二(白名单:如果白名单在1000以内,建议使用,1000及以上不建议使用)

<manifest >

<queries>

<package android:name="com.google.gson"/>

</queries>

<manifest >

3、方案三(action:建议使用)
复制代码
<queries>
    <intent>
        <action android:name="android.intent.action.MAIN"/>
    </intent>
    <intent>
        <action android:name="com.appsflyer.referrer.INSTALL_PROVIDER"/>
    </intent>
    <intent>
        <action android:name="android.intent.action.VIEW"/>
        <category android:name="android.intent.category.BROWSABLE"/>
        <data android:scheme="https"/>
    </intent>
    <intent>
        <action android:name="android.support.customtabs.action.CustomTabsService"/>
    </intent>
    <intent>
        <action android:name="android.intent.action.DIAL"/>
    </intent>
</queries>

二、API代码

1、方案一(已废弃方案,Android15以下)

PackageManager.getInstalledPackages

优点:
  1. 配合权限可以获取手机全部安装列表 。
  2. 配合action可获取到大部分已安装app(个别系统应用获取不到)
缺点:
  1. 部分类型应用,google禁止使用QUERY_ALL_PACKAGES权限,如果app内添加此权限,会被拒绝上架,例如:金融类型app。
  2. Android15开始 +getInstalledPackagesAPI 获取不到除app本身外的任何已安装app。
  3. Android15对白名单package开始限制在1000以内,超过这个数量,手机无法安装应用。(用于不添加权限)eg:

<manifest >

<queries>

<package android:name="com.google.gson"/>

</queries>

<manifest >

4.Android11开始,google play 不再建议使用这种方式,Android 15开始这个api通过action方式获取不到app列表了,

2、方案二 (建议使用,但获取到的app列表比较少,大部分非系统应用都可以获取,超过半数的系统应用获取不到),与action配合使用,也可以action与白名单混合使用

PackageManager.queryIntentActivities(intent, PackageManager.MATCH_ALL);

优点:

没有系统适配的限制

缺点:

获取到的列表不全

总结

  1. 如果可以使用权限,则使用权限+getInstalledPackages 方案没有问题。
  2. 如果不可以使用权限,需要查询的白名单少,可以使用 Manifest第二种配置方案+getInstalledPackages
  3. 如果白名单超过了999个包名,则建议使用 action方式+白名单+queryIntentActivities方式
相关推荐
千里马学框架4 天前
一起学 Android 14:ShellTransition 屏幕旋转过程深度剖析
android·智能手机·性能优化·framework·性能·屏幕旋转·rotation
美狐美颜SDK开放平台4 天前
开发直播APP时如何接入视频美颜SDK?开发流程与注意事项
android·人工智能·计算机视觉·音视频·直播美颜sdk
AFinalStone4 天前
Android7 SystemUI源码解析(七)Keyguard锁屏模块深度解析
android·systemui
致远ccc4 天前
Google Play 上架前如何测试 App?多国家 Android 环境测试
android·app测试·googleplay·多国家应用测试
ttyyttemo4 天前
Kotlin 协程中的 Job 结构化并发与取消
android
sun0077004 天前
tbox 4g/5g切换,导致wan ip 改变,导致车机旧网络不可用。需要重启车机才行
android
其实防守也摸鱼4 天前
内网穿透与反向代理:原理、工具与实战指南
android·大数据·运维·安全·网络安全·自动化·渗透
AFinalStone4 天前
Android7 SystemUI 源码解析(四)NavigationBar 导航栏与 SystemBars
android·systemui
JMchen4 天前
属性动画原理与高级动画实现
android·kotlin·canvas
AFinalStone4 天前
Android7 SystemUI 源码解析(二)启动流程深度解析
android·systemui