Android无法获取已安装应用包名的问题

前言

在某些情况下,我们需要获取android上已安装的第三方应用的一些信息

检索

csharp 复制代码
private boolean isAppInstalled(Context context, String pkgName) {
        if (pkgName == null || pkgName.isEmpty()) {
            return false;
        }
        PackageInfo packageInfo;
        try {
            packageInfo = context.getPackageManager().getPackageInfo(pkgName, PackageManager.GET_ACTIVITIES);
        } catch (PackageManager.NameNotFoundException e) {
            packageInfo = null;
            e.printStackTrace();
        }
        if (packageInfo != null) {
            return true;
        }
        return false;
    }

例如:使用如上代码检索,有些情况下也无法获取应用信息,而有些机型又可以获取到应用信息

原因

从Android 11 开始 系统对app的可见性进行了保护,只有部分应用可见所有app

即使您的应用以 Android 11(API 级别 30)或更高版本为目标平台,以下类型的应用也始终对您的应用可见:

您自己的应用。

实现 Android 核心功能的某些系统软件包,例如媒体提供程序。

安装了您应用的应用。

使用 startActivityForResult() 方法在您的应用中启动 activity 的任何应用,正如如何获取 activity 的结果这一指南中所述。

启动或绑定到您应用中的某项服务的任何应用。

访问您应用中的 Content Provider 的任何应用。

具有 Content Provider 的任何应用,其中您的应用已被授予 URI 权限来访问该 Content Provider。

接收您应用的输入的任何应用。这种情况仅适用于您的应用作为输入法应用提供输入。

此外,您可以使用隐式或显式 intent 来启动另一应用的 activity,无论这个应用是否对您的应用可见。

通过命令 adb shell dumpsys package queries 可以查看系统的具体可见性

forceQueryable:标签下的apk 表示 可见所有已安装的apk

queries via package name: 标签表示只有配置了包名 才对该app可见

queries via intent: 标签表示只有配置了intent 才对该app可见

只有配置了对应的标签 ,才能获取到对应的app信息

如果 没有配置标签 还想可见所有app,需配置权限

解决

需要在清单文件中配置(标签内)如下包名信息:

csharp 复制代码
<queries>
        <package android:name="第三方应用包名" />
    </queries>
相关推荐
y = xⁿ2 小时前
DeepSeek Harness 学习日记:关于Agent接口,工具调用的底层实现
android·java·学习
2601_962066494 小时前
【Sql Server】Update中的From语句,以及常见更新操作方式
android·java·数据库
用户69371750013849 小时前
曾经安卓开发人手一个的 EventBus,为什么现在没人爱用了?
android·android studio
九皇叔叔11 小时前
MySQL ORDER BY 性能优化详解:Using filesort、联合索引、ASC/DESC 与覆盖索引
android·adb
OriginCoding12 小时前
用 AI Agent 协作完成一个 Android TOTP 应用:从需求边界到 v1.0.0
android·ai编程
杉氧14 小时前
React 灵魂:深入剖析 Hooks 与副作用(Side Effects)陷阱
android·前端·react native
又见情义15 小时前
RK3568 + RTL8211F 网络唤醒(WOL)功能适配全记录
android·网络·驱动开发
用户09340777351415 小时前
HarmonyOS WPS Open SDK 实践:registerApp 鉴权与就绪门禁
android·typescript·harmonyos
jike_202615 小时前
会议离线录音APP:无网络记录能力对比
android·智能手机·语音识别
always_TT16 小时前
【Python 字符串格式化:format() 方法】
android·开发语言·python