当前位置: 首页 > article >正文

Android App安装列表获取

目录

前言

实现方案

        方案概述

一、 AndroidManifest 三种配置方式

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

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

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

二、API代码

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

        优点:

        缺点:

        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方式

http://www.kler.cn/a/599690.html

相关文章:

  • k8s基础知识总结node+pod(上)
  • 跨域,前端
  • 埋点数据采集方案
  • 机器学习结合伏羲模型高精度多尺度气象分析与降尺度实现
  • C++ 性能优化隐藏危机:忽视数据结构与内存细节,效率大打折扣
  • 常见中间件漏洞:Apache篇
  • 使用 ByteDance 的 UI-TARS Desktop 探索 AI 驱动的 GUI 自动化新前沿
  • 计算机网络的分类——按照按拓扑结构分类
  • OpenHarmony子系统整机启动流程
  • Spring漏洞再现
  • Java设计模式之解释器模式
  • 堆外内存 OOM:现象分析与优化方案
  • 3.24-3 接口测试断言
  • 【RabbitMQ高级特性】消息确认机制、持久化、发送方确认、TTL和死信队列
  • C语言:扫雷
  • uniapp超简单ios截屏和上传app store构建版本方法
  • 基于Azure Delta Lake与Databricks的医疗数据变更管理
  • K8S学习之基础四十六:k8s中部署Kibana
  • 批量修改 PPT 文档中主题、编辑时长、来源等元数据信息
  • 在 Jenkins Pipeline 中利用 Groovy 的闭包特性创建自定义语法糖