更新:我必须完全改变我的问题,因为我发现了更多与我的问题相关的细节。
问题:我的解析内容提供程序的应用在 API 30 的模拟器上无法工作。错误信息:
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,那么就没有问题。
带有ContentProvider的应用程序中的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注册的某些内容已更改,但我找不到哪里发生了变化。