在将targetSdkVersion
设置为30
(Android11)之后,在我知道存在的包上执行packageManager.getPackageInfo(packageName, PackageManager.GET_PERMISSIONS)
时,将得到android.content.pm.PackageManager$NameNotFoundException
。
堆栈跟踪如下:
android.content.pm.PackageManager$NameNotFoundException: com.google.android.apps.maps
at android.app.ApplicationPackageManager.getPackageInfoAsUser(ApplicationPackageManager.java:202)
at android.app.ApplicationPackageManager.getPackageInfo(ApplicationPackageManager.java:174)
发布于 2020-06-12 13:59:51
如https://developer.android.com/preview/privacy/package-visibility中所述
安卓11改变了应用程序与用户在设备上安装的其他应用程序的查询和交互方式。使用新元素,应用程序可以定义它们可以访问的其他应用程序集。这个元素通过告诉系统哪些其他应用程序对你的应用程序可见,并帮助像谷歌这样的应用商店评估你的应用程序为用户提供的隐私和安全性,这有助于鼓励最低特权原则。
如果您的应用程序以Android 11为目标,您可能需要在应用程序的清单文件中添加元素。在元素中,可以通过包名或意图签名来指定应用程序。
因此,您要么停止所做的操作,要么请求访问有关某些包的信息,或者--如果您有理由--使用权限QUERY_ALL_PACKAGES
。
查询和与特定包交互
要查询特定包并与其进行交互,您可以如下所示更新AndroidManifest.xml
:
<manifest ...>
...
<queries>
<package android:name="com.example.store" />
<package android:name="com.example.services" />
</queries>
...
<application ...>
...
</manifest>
查询和与所有应用程序交互
我有一个应用程序,需要能够要求所有应用的信息。您所要做的就是向AndroidManifest.xml
添加以下内容
<manifest ...>
...
<uses-permission android:name="android.permission.QUERY_ALL_PACKAGES" />
...
<application ...>
...
</manifest>
https://stackoverflow.com/questions/62345805
复制相似问题