2017-07-26 80 views
0

我有两个不同的应用程序。应用程序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中为App答:

<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中为App 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 

我也知道应用程序安装的顺序。我首先安装应用程序A,然后安装应用程序B.

我已阅读其他相关问题,但其解决方案无法帮助我。

回答

0

返修您的许可声明,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> 

你可能会考虑宣布的保护级别“危险”,要求用户确认,允许它(和需要更新的权限处理新版Android )