Android 11设置Intent.ACTION_VIEW的URI使用queryIntentActivities查询

Android 11最小权限原则有一项规定,使用queryIntentActivities查询,只能查询到一些自动对您的应用可见的应用如:浏览器、apk安装等,其他应用查不到了。

如果想查到那些不可见的应用有两种方式:

一、在Manifest中添加QUERY_ALL_PACKAGES权限

添加了这个QUERY_ALL_PACKAGES权限后可以查到所有应用了,但是如果想上架Google的应用商店是不行的,Google会检测这个然后把你的应用拒掉,国内不知道有没有问题

二、在Manifest中添加<queries>标签

这里我只讲一种是通过URI的方式查询。

例如:


    public static List<ResolveInfo> getUPIPackages(Context context){
        Intent upiIntent =new Intent(Intent.ACTION_VIEW, Uri.parse("upi://pay"));
        PackageManager pm = context.getPackageManager();
        List<ResolveInfo> upiPackageInfoList= pm.queryIntentActivities(upiIntent, 0);
        return upiPackageInfoList;
    }

Uri.parse("upi://pay")这个 upi://pay 是以 scheme为 upi  以host为 pay

所以<queries>方式应该这么写

    <queries>
        <intent>
            <action android:name="android.intent.action.VIEW" />
            <data android:scheme="upi" android:host="pay" />
        </intent>
    </queries>

其它的方式大家可以看这个谷歌的官方文档:

重要变更 | Android 11 中的软件包可见性 - 知乎在 Android 10 及之前的版本中,应用可以通过 queryIntentActivities() 这样的方法获取到设备中所有已安装的应用列表。在大多数情况下,这种访问权限远超出了应用实际所需要的权限范围。随着我们不断加强对隐私保…https://zhuanlan.zhihu.com/p/265655310

管理软件包可见性  |  Android 开发者  |  Android Developershttps://developer.android.google.cn/training/basics/intents/package-visibility根据用例配置软件包可见性  |  Android 开发者  |  Android Developershttps://developer.android.google.cn/training/basics/intents/package-visibility-use-cases#open-urls
通用 Intent  |  Android 开发者  |  Android Developersicon-default.png?t=M0H8https://developer.android.google.cn/guide/components/intents-common#AdbIntents

最后附带获取到packge信息后如何显示logo和appName

        PackageManager pm = getContext().getPackageManager();
        binding.tvAppName.setText(resolveInfo.loadLabel(pm).toString());
        binding.ivLogo.setImageDrawable(resolveInfo.loadIcon(pm));
ResolveInfo就是通过queryIntentActivities得到的
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值