**更新:**我必须完全改变我的问题,因为我发现了更多与我的问题相关的细节。
问题在于:解析内容提供者的应用程序无法在具有API 30的Emulator中运作。错误:
java.lang.SecurityException: Failed to find provider com.a52.datafeeder01.MyProvider for user 0; expected to find a valid ContentProvider for this authority
如果我使用API 26、27、28和29,则没有问题。
应用程序中的AndroidManifest.xml与内容提供程序:
<manifest>
<permission
android:name="MyProvider._READ_PERMISSION"
android:protectionLevel="normal" />
<application>
<activity>
...
</activity>
<provider android:name=".MyProvider"
android:authorities="com.a52.datafeeder01.MyProvider"
android:enabled="true"
android:exported="true"
android:readPermission="MyProvider._READ_PERMISSION"/>
</application>
</manifest>
客户端应用程序中的AndroidManifest.xml:
<manifest>
...
<uses-permission android:name="MyProvider._READ_PERMISSION" />
...
</manifest>
如果我尝试在同一个应用程序中解析内容提供程序,它会工作。
如果我在我的客户端代码中使用packageManager.getInstalledPackages(PackageManager.GET_PROVIDERS)
来获取现有提供程序的列表,那么对于API [26,29],我可以在列表中看到我的提供程序。如果我在API 30中运行此代码,我的提供程序不在列表中。
似乎API 30中与ContentProvider注册相关的内容发生了变化。但是我找不到是什么。
4条答案
按热度按时间slmsl1lt1#
我的自定义ContentProvider无法在使用API 30的Emulator上工作的原因是Package visibility in Android 11+
为了修复我的问题,我在客户端的AndroidManifest.xml中添加了以下
<queries>
元素:其中
com.a52.datafeeder01
是定义自订ContentProvider的套件名称。xwbd5t1u2#
如果遇到我的问题,只需添加:
其中
authorities
值是提供程序权限。参考:https://developer.android.com/training/basics/intents/package-visibility#provider-authority
gojuced73#
请在清单中添加以下权限
这解决了我在android 11中的问题
vzgqcmou4#
从Android 11开始,软件包可见性有所变化。因此需要添加查询,如下所示
https://developer.android.com/training/package-visibility