相关疑难解决方法(0)

是内部使用内容提供者所需的android:exported ="true"

我在应用程序清单中定义了一个提供程序:

<provider
    android:authorities="com.example.myapp.provider"
    android:name="com.example.myapp.MyProvider">
</provider>
Run Code Online (Sandbox Code Playgroud)

只需要在应用程序中使用提供程序.但是当我尝试运行我的活动时,我收到以下错误:

Failed to find provider info..
Run Code Online (Sandbox Code Playgroud)

但是如果我只是在清单中设置提供程序的export属性,它就可以正常工作:

android:exported="true" 
Run Code Online (Sandbox Code Playgroud)

所以我的问题是为什么需要这个?因为,根据文档(http://developer.android.com/guide/topics/manifest/provider-element.html#exported),仅当提供程序可用于其他应用程序时才需要导出.难道我做错了什么?

[编辑]:令人惊讶的是,即使在删除导出的属性后,错误也已消失,而不进行任何其他更改.我不知道为什么它现在正在运作.可能是我身边的一些愚蠢的错误.我把这个问题保持开放,希望得到关于什么一定出错的线索.

[编辑]:这次我用接收器再次面对这个问题.所以这不是我身边的错误,正如我在之前的编辑中所假设的那样.我怀疑ADT构建工具有问题.

android android-contentprovider

8
推荐指数
1
解决办法
2979
查看次数

未能在 API 30 中找到内容提供者

更新:我必须彻底改变我的问题,因为我发现了更多与我的问题相关的细节。

问题:我的解决 Content Provider 的应用程序在带有 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
Run Code Online (Sandbox Code Playgroud)

如果我使用 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>
Run Code Online (Sandbox Code Playgroud)

客户端应用程序中的 AndroidManifest.xml :

<manifest>
...
    <uses-permission android:name="MyProvider._READ_PERMISSION" />
...
</manifest>
Run Code Online (Sandbox Code Playgroud)

如果我尝试在同一个应用程序中解析 Content Provider,它会起作用。

如果我packageManager.getInstalledPackages(PackageManager.GET_PROVIDERS)在我的客户端代码中使用来获取现有提供者的列表,那么对于 API [26,29] 我可以在列表中看到我的提供者。如果我在 API 30 中运行此代码,我的提供者不在列表中。

API 30 中与 …

android android-contentresolver android-contentprovider

8
推荐指数
3
解决办法
2064
查看次数