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的应用 核对权限还是蛮重要的 ,一不小心就会受到限制。

 

posted @ 2022-03-03 15:53  Mr,Han  阅读(779)  评论(0)    收藏  举报