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

时间:2014-06-01 07:44:46

标签: android android-contentprovider

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

<provider
    android:authorities="com.example.myapp.provider"
    android:name="com.example.myapp.MyProvider">
</provider>

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

Failed to find provider info..

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

android:exported="true" 

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

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

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

2 个答案:

答案 0 :(得分:2)

确保您的<provider>标记位于<application>...</application>标记内。

<application>
    ...
    <provider
        android:authorities="com.ingamedeo.databasetest.contentprovider"
        android:name=".db.ContentProviderDb"
        android:exported="false">            
    </provider>
</application>

答案 1 :(得分:0)

更新:您无法再设置

  

android:exported =“ true”

您将遇到java.lang.SecurityException: Provider must not be exported异常。