我试图创建一个只能由同一证书签名的应用程序使用的内容提供程序。 我已经宣布像这样的内容提供商
<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
。
有什么想法吗?
答案 0 :(得分:1)
首先,使用android:permission
或 android:readPermission
和android:writePermission
的组合。
其次,需要首先安装定义这些权限的<permission>
元素的应用程序。
第三,其他应用需要相应的<uses-permission>
元素才能获得必要的权限。
答案 1 :(得分:0)
我发现了问题。 其中一个应用程序通过gradle.build签名配置使用了不同的调试密钥集。