访问另一个应用程序中的Content Provider的安全异常

时间:2016-05-04 11:48:12

标签: android android-contentprovider

我试图创建一个只能由同一证书签名的应用程序使用的内容提供程序。 我已经宣布像这样的内容提供商

<provider
    android:name=".MyProvider"
    android:authorities="com.example.provider"
    android:permission="com.example.permissions.USER_PERMISSION"
        android:readPermission="com.example.permissions.USER_PERMISSION_READ"
        android:writePermission="com.example.permissions.USER_PERMISSION_WRITE"
        android:exported="true">
</provider>

我已经使用签名保护级别声明了权限。

一切都很好但是当我尝试从其他应用程序访问提供程序时:

   //Create an URI that will be used to check the status of the content provider
    Uri myURI = Uri.parse("content://com.example.provider");
    ContentResolver contentResolver = getContentResolver();

    try {
        contentResolver.insert(prototypeURI,null);
    } catch (Exception e) {
        e.printStackTrace();
    }

我得到SecurityException: Permission Denial: opening provide ... requires com.example.permissions.USER_PERMISSION_READ

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

首先,使用android:permission android:readPermissionandroid:writePermission的组合。

其次,需要首先安装定义这些权限的<permission>元素的应用程序。

第三,其他应用需要相应的<uses-permission>元素才能获得必要的权限。

答案 1 :(得分:0)

我发现了问题。 其中一个应用程序通过gradle.build签名配置使用了不同的调试密钥集。