最近很多app因为QUERY_ALL_PACKAGES的问题,被google play下架了,这对重度依赖applist的现金贷公司来说无疑是灾难,这相当于你去银行借钱,但银行没有办法查到你的征信情况,只能盲放了,逾期率变高这谁都顶不住。
下面我将介绍applist的一些获取方法,希望能帮大家多苟几天哈哈哈,稳食艰难
1、QUERY_ALL_PACKAGES政策情况
仅当您的应用在搭载 Android 11 或更高版本的设备上以 Android API 级别 30 或更高版本为目标运行环境时,该应用才能使用 QUERY_ALL_PACKAGES
权限。
要想使用此权限,您的应用对此权限的使用必须在下方列出的允许使用情形范畴内,并且应用的核心用途之一是搜索设备上的所有应用。您必须能够给出充分理由,说明为何您的应用如果以侵扰度较低的方式查询其他应用的安装情况,则不足以实现符合政策规定的面向用户的核心功能。
核心功能即应用的主要用途。如果不具备搜索设备上所有应用这一核心功能,应用就会“损坏”或无法使用。对于核心功能以及构成核心功能的所有核心特性,您必须在应用说明中醒目地载明并宣传。
具体政策看链接:https://support.google.com/googleplay/android-developer/answer/10158779#zippy=%2Cpermitted-uses-of-the-query-all-packages-permission%2Cexceptions%2Cinvalid-uses%E3%80%81
敏感信息访问权限和 API:https://support.google.com/googleplay/android-developer/answer/9888170
2、applist获取方式
管理软件包可见性:
https://developer.android.google.cn/training/basics/intents/package-visibility#intent-signature
2.1 QUERY_ALL_PACKAGES获取
是目前最好的获取的方式,如果能用还是优先使用这个方法
[图片上传失败...(image-f6d755-1663999337707)]
2.2 软件包名称获取
这种方式看起来比较low和麻烦,你需要把你想要的包名都写上,隔三差五更新一下,需要的包名一多,维护起来相当麻烦
添加包名 <package android:name="com.sina.weibo" /> # 通过以下方式判断是否存在就行了: context.getPackageManager().getPackageInfo(pkgName, 0);
[图片上传失败...(image-3d9980-1663999337707)]
2.3 intent 签名获取
intent获取的方式比2.2的方式方便很多,不需要知道app具体的包名就能获取applist,
有大神测试过,和QUERY_ALL_PACKAGES方式获取的差异主要在一些系统级别的软件,这个影响不大,具体见:
https://juejin.cn/post/7137864762045497358#heading-7
调用方法:queryIntentActivities
[图片上传失败...(image-2623c6-1663999337706)]
2.4 按提供程序授权
这种方式获取到的applist太少了,限制特别多,像对小贷公司来说可以选择放弃了:https://developer.android.com/training/package-visibility/automatic
自动可见的应用类型:
- 您自己的应用。
- 实现 Android 核心功能的某些系统软件包,例如媒体提供程序。
- 安装了您应用的应用。
- 使用
[startActivityForResult()](https://link.zhihu.com/?target=https%3A//developer.android.com/reference/kotlin/android/app/Activity%23startactivityforresult)
方法在您的应用中启动 activity 的任何应用,正如如何获取 activity 的结果这一指南中所述。 - 启动或绑定到您应用中的某项服务的任何应用。
- 访问您应用中的 Content Provider 的任何应用。
- 具有 Content Provider 的任何应用,其中您的应用已被授予 URI 权限来访问该 Content Provider。
- 接收您应用的输入的任何应用。这种情况仅适用于您的应用作为输入法应用提供输入。
[图片上传失败...(image-51599b-1663999337706)]
扩展阅读
聊聊Applist那些事儿:https://mp.weixin.qq.com/s/C222U2ddBMeR21Ndek6c8Q
[图片上传失败...(image-286dd7-1663999337706)]
声明软件包可见性需求: https://developer.android.com/training/package-visibility/declaring
开发者如何处理软件包可见性:https://zhuanlan.zhihu.com/p/363644001