我有一个内容提供者和一个测试应用程序都使用调试密钥签名。如果未应用权限,客户端通常会收到内容,但我想对内容应用权限。因此将以下行添加到内容提供者的清单文件中:
<permission android:name="org.example.provider.READ"
android:permissionGroup="org.example.group.DATA_ACCESS"
android:label="@string/readonlyaccess"
android:protectionLevel="signature" />
<application
...
<provider android:name=".ImageContentProvider"
android:authorities="org.example.provider"
android:readPermission="org.example.provider.READ" />
在客户端的清单文件中添加了以下行:
<uses-permission android:name="org.example.provider.READ" />
当我尝试从提供程序获取数据时,出现错误:
09-13 22:38:20.995: E/AndroidRuntime(13979): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.hello/com.example.hello.HelloActivity}: java.lang.SecurityException: Permission Denial: reading org.example.ImageContentProvider uri content://org.example.provider/file from pid=13979, uid=10040 requires org.example.provider.READ
我错过了什么,还是与应用程序由调试密钥签名的事实有关?如何解决问题?我也看到了添加uses-permission
到提供程序的建议,但这也无济于事。注意。如果这可能很重要,则会在模拟器中进行检查。
我发现一个相关的问题throws SecurityException when signing with default debug keystore,但它没有提供实际的解决方案。