使用自定义权限阅读内容提供者时获得权限拒绝
Getting permission denial while reading content provider using a custom permission
我有两个不同的应用程序。应用程序 A 定义了一个自定义权限和一个需要定义的自定义权限的内容提供者。应用程序 B 使用该权限并尝试访问应用程序 A 的内容提供者。但是,我收到以下错误:
java.lang.SecurityException: Permission Denial: reading com.casimirlab.simpleDeadlines.provider.DeadlineProvider uri content://com.casimirlab.simpleDeadlines.provider/deadlines from pid=17350, uid=10070 requires com.casimirlab.simpleDeadlines.READ_DEADLINE_DATABASE, or grantUriPermission()
AndroidManifest.xml 应用程序 A:
<Permission
android:name="com.casimirlab.simpleDeadlines.READ_DEADLINE_DATABASE"
android:protectionLevel="normal">
</Permission>
<uses-permission android:name="com.casimirlab.simpleDeadlines.READ_DEADLINE_DATABASE" />
...
<provider
android:name=".provider.DeadlineProvider"
android:authorities="com.casimirlab.simpleDeadlines.provider"
android:readPermission="com.casimirlab.simpleDeadlines.READ_DEADLINE_DATABASE"
android:exported="true"
android:grantUriPermissions="true" />
AndroidManifest.xml 应用程序 B:
<uses-permission android:name="com.casimirlab.simpleDeadlines.READ_DEADLINE_DATABASE" />
应用程序B中的查询代码:
Uri uri = Uri.parse("content://com.casimirlab.simpleDeadlines.provider/deadlines");
ContentResolver cr = getContentResolver();
Cursor cursor = cr.query(uri, null, null, null, null);
我正在为这两个应用程序使用以下版本。
compileSdkVersion 23
buildToolsVersion '25.0.0'
minSdkVersion 10
targetSdkVersion 23
我也知道应用程序安装的顺序。我先安装App A,再安装App B。
我已经阅读了其他相关问题,但他们的解决方案对我没有帮助。
修改您的权限声明,XML区分大小写:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.casimirlab.simpleDeadlines">
<permission android:name="com.casimirlab.simpleDeadlines.READ_DEADLINE_DATABASE"
android:protectionLevel="normal" />
...
</manifest>
您可以考虑声明保护级别 "dangerous",要求用户确认允许它(并且在 Android 的较新版本上需要较新的权限处理。)
我有两个不同的应用程序。应用程序 A 定义了一个自定义权限和一个需要定义的自定义权限的内容提供者。应用程序 B 使用该权限并尝试访问应用程序 A 的内容提供者。但是,我收到以下错误:
java.lang.SecurityException: Permission Denial: reading com.casimirlab.simpleDeadlines.provider.DeadlineProvider uri content://com.casimirlab.simpleDeadlines.provider/deadlines from pid=17350, uid=10070 requires com.casimirlab.simpleDeadlines.READ_DEADLINE_DATABASE, or grantUriPermission()
AndroidManifest.xml 应用程序 A:
<Permission
android:name="com.casimirlab.simpleDeadlines.READ_DEADLINE_DATABASE"
android:protectionLevel="normal">
</Permission>
<uses-permission android:name="com.casimirlab.simpleDeadlines.READ_DEADLINE_DATABASE" />
...
<provider
android:name=".provider.DeadlineProvider"
android:authorities="com.casimirlab.simpleDeadlines.provider"
android:readPermission="com.casimirlab.simpleDeadlines.READ_DEADLINE_DATABASE"
android:exported="true"
android:grantUriPermissions="true" />
AndroidManifest.xml 应用程序 B:
<uses-permission android:name="com.casimirlab.simpleDeadlines.READ_DEADLINE_DATABASE" />
应用程序B中的查询代码:
Uri uri = Uri.parse("content://com.casimirlab.simpleDeadlines.provider/deadlines");
ContentResolver cr = getContentResolver();
Cursor cursor = cr.query(uri, null, null, null, null);
我正在为这两个应用程序使用以下版本。
compileSdkVersion 23
buildToolsVersion '25.0.0'
minSdkVersion 10
targetSdkVersion 23
我也知道应用程序安装的顺序。我先安装App A,再安装App B。
我已经阅读了其他相关问题,但他们的解决方案对我没有帮助。
修改您的权限声明,XML区分大小写:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.casimirlab.simpleDeadlines">
<permission android:name="com.casimirlab.simpleDeadlines.READ_DEADLINE_DATABASE"
android:protectionLevel="normal" />
...
</manifest>
您可以考虑声明保护级别 "dangerous",要求用户确认允许它(并且在 Android 的较新版本上需要较新的权限处理。)