我是靠谱客的博主 端庄白昼,这篇文章主要介绍Android 11 软件包可见性(Package Visibility)适配,现在分享给大家,希望可以做个参考。

软件包可见性只是对有些场景有影响的。总的来说就是,只要是查询别的app的信息都会受到影响的。Apps that are visible automatically 中说明了哪些情况下软件包可见性是自动获取的。
startActivity() method is unaffected by the system’s package visibility behavior, you don’t need to add a element to your app’s manifest.
Open URLs in a browser or other app

实践

  • getPackageInfo
    PackageManager中的方法是受到软件包可见性影响的。
    Note: If your app targets Android 11 (API level 30) or higher, the methods in this class each return a filtered list of apps. Learn more about how to manage package visibility.

在项目中经常会使用getPackageInfo传入包名来判断一个app是否安装,target 30的app在Android 11手机上,这个方法就会抛出NameNotFoundException,实际查询的app是存在的。做分享或第三方支付的时候,这个函数调用很常用。那么要怎么解决这个问题呢?
解决办法就是在Manifest的中配置需要查询的包名,问题是这种包名很多,工作量大而且容易漏掉。有个简便的方式,如下配置

复制代码
1
2
3
4
5
6
7
<queries> <intent> <action android:name="android.intent.action.MAIN"/> <category android:name="android.intent.category.LAUNCHER"/> </intent> </queries>
  • getInstalledPackages
    这个函数是受软件包可见性影响的,不在中配置,很多app被过滤掉了

参考

Android 11 中的软件包可见性
重要变更 | Android 11 中的软件包可见性

最后

以上就是端庄白昼最近收集整理的关于Android 11 软件包可见性(Package Visibility)适配的全部内容,更多相关Android内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(58)

评论列表共有 0 条评论

立即
投稿
返回
顶部