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

这篇具有很好参考价值的文章主要介绍了Android无法获取已安装应用包名的问题。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

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

检索

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,需配置权限

解决

需要在清单文件中配置(标签内)如下包名信息:文章来源地址https://www.toymoban.com/news/detail-833308.html

<queries>
        <package android:name="第三方应用包名" />
    </queries>

到了这里,关于Android无法获取已安装应用包名的问题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Android 获取手机已安装的应用列表(适配)

    加上权限才能获取到所有的应用 低版本的手机 可以用else里边的方法 也可以用 Intent的action 是:Intent.ACTION_MAIN 这个不要传错。 水平有限,如有问题欢迎评论区留言指正。 如果在高版本上有问题的话建议将 targetSdkVersion设置成26试试。 关注我获取更多知识或者投稿

    2024年02月13日
    浏览(41)
  • “此应用专为旧版android打造,因此可能无法运行”,问题解决方案

    当用户在Android P系统上打开某些应用程序时,可能会弹出一个对话框,提示内容为:“此应用专为旧版Android打造,可能无法正常运行。请尝试检查更新或与开发者联系”。 随着Android平台的发展,每个新版本通常都会引入新的功能和API,同时逐渐弃用或改变一些旧版本的API。

    2024年02月05日
    浏览(56)
  • Android Studio 无法安装apk到小米手机问题解决

    以前开发都是用自己的samsung手机,打开开发者选项和usb调试,直接可以连上Android Studio,进行调试,后来我的samsung退伍了,换上了Apple,就无法使用了,用公司的小米手机打开开发者选项和usb调试,然后进行调试,将apk安装小米手机安装应用报错(Failed to establish session Erro

    2024年02月15日
    浏览(72)
  • 手机显示此应用专为旧版android打造,因此可能无法运行,点击应用后闪退的问题解决方案

    如果您在尝试安装并运行一个Android应用(APK文件)时遇到错误消息“此应用专为旧版Android打造, 因此可能无法运行”,或者应用在启动时立即崩溃,以下是一些您可以尝试的解决步骤: 图片来源:手机显示此应用专为旧版android打造,因此可能无法运行,点击应用后闪退的问题

    2024年01月21日
    浏览(73)
  • 新版Android Studio搜索不到Lombok以及无法安装Lombok插件的问题

    在最近新版本的Android Studio中,使用插件时,在插件市场无法找到Lombox Plugin,具体表现如下图所示: 1、操作步骤: (1)打开Android Studio-Settings-Plugins,搜索Lombok,发现并没有带小辣椒的Lombok,如下图所示: (2)所以,想到通过插件市场自己手动下载安装,插件市场的地址为

    2024年02月07日
    浏览(53)
  • Android Studio修改项目包名

    1.第一步,项目结构是这样的,3个包名合在了一起,我们需要把每个包名单独展示出来 2.我们点击这个 弹出如下图内容,把红色圆圈的地方点击选择取消选中 取消选中后的包名结构是这样的,可以看到,包名的每个文件夹已经展示分开了,现在我们可以单独对每个包名文件

    2024年02月13日
    浏览(36)
  • android 11及以上如何通过包名跳转APP

    下面是通过包名跳转到其他APP的代码,以微信APP包名为例: 通过日志可知道,intent为null,当包名错误或者该APP未配置启动Activity时,就会为null,为啥呢? 经过一晚上的上网查询,找到答案了,如下: Android 11以下,上述代码就可以跳转,但是11及以上,查询包名相关的方法都

    2024年01月25日
    浏览(42)
  • Android 12.0根据包名授予读取IMEI权限

     在12.0的产品开发中,对于读取设备的imei sn号功能也是常有的,而在10.0以后对于读取imei也是受权限要求越来越多了一般的app是读取不到这个权限了,根据产品需求需要读取这个权限,所以需要在系统中对这个app授权让它读取包名,从而实现功能  首选在app中看如何获取ime

    2024年02月06日
    浏览(61)
  • 查看Android App包名,查看keystore的信息,导出公钥

    查看Android App包名的三种方法 cmd中输入命令:adb shell am monitor                     然后启动需要获取包名的应用 cmd中输入命令:adb shell pm list packages -3        查看自己安装的app包名 安卓系统中:设置——应用——正在运行 查看 查看keystore信息 cmd中输入命令 keytool -list

    2024年02月08日
    浏览(52)
  • Android打开系统文件管理器,并获取选中文件的路径,适配Android10及以上无法获取路径

    1.进入文件管理器 2.在onActivityResult中获取返回结果 3.FileHelper完整工具类

    2024年02月02日
    浏览(59)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包