Android 开发随笔-Android11 包可见性适配
最近在适配Android 11 设备的分享功能时,发现了一个小坑:因为我们应用有需要分享内容到WhatsApp的需求,最开始的思路是根据Intent
android.content.Intent.ACTION_SEND 来分享内容,在分享之前先检查是否有安装对应应用:
fun isContainPackName(mContext: Context, packName: String): Boolean {
var isContainPack = false
try {
val packageManager = mContext.getPackageManager()
val info = packageManager.getPackageInfo(packName, GET_ACTIVITIES)
if (info != null) {
isContainPack = true
}
} catch (e: NameNotFoundException) {
e.printStackTrace()
}
return isContainPack
}
在Android11以下的设备上用此方法都没有问题,但是在Android11设备上,上述方法就返回错误的结果了,尽管我手机上已经安装了WhatsApp,还是返回的false.
网上搜索一番,在官方文档上找到了相关的说明。根据官方文档的描述:

相当于需要在Android11上作特殊处理,这些应用才对我们可见。官方文档也给出了方法:

因为知道WhatsApp的包名,就用了上述配置方法。

经过测试确实可以正常分享了,但是我在最后多加了个权限android.permission.QUERY_ALL_PACKAGES 想的是当用户没有安装WhatsApp时可以去查找适合的应用,然而当加入了这个权限后导致应用在Google Play上搜索不到了 ,去掉后重新上架才回复正常。
查阅官方文档只发现了相关的一点内容:

踩坑完毕,总结来说在上架GooglePlay的应用 核对权限还是蛮重要的 ,一不小心就会受到限制。

浙公网安备 33010602011771号