Запрос разрешения на чтение от моего собственного ContentProvider в другом приложении

В одном приложении у меня есть следующий контент-провайдер, объявленный в моем AndroidManifest:

<provider android:name="bbct.android.common.BaseballCardProvider" android:label="@string/provider_name" android:authorities="bbct.android.baseballcard" android:readPermission="bbct.android.lite.permission.READ" /> 

И еще одно приложение запрашивает разрешение на его использование:

 <uses-permission android:name="bbct.android.lite.permission.READ" /> 

Но при запуске этого кода:

  ContentResolver resolver = this.context.getContentResolver(); Cursor results = resolver.query(BaseballCardContract.CONTENT_URI, BaseballCardContract.PROJECTION, null, null, null); 

Появляется следующее сообщение об ошибке:

E / DatabaseUtils (1009): java.lang.SecurityException: отказ в разрешении: чтение bbct.android.common.BaseballCardProvider uri content: //bbct.android.baseballcard/baseball_cards из pid = 996, uid = 10046 требует bbct.android.lite .permission.READ или grantUriPermission ()

Из того, что я могу сказать, я требую разрешения. Что мне здесь не хватает? Что еще мне нужно посмотреть?

В приложении, определяющем ваш ContentProvider, вы также определили, какое разрешение вы требуете / запрашиваете (в другом приложении)? Так же (в корневом <manifest/> ):

 <permission android:name="bbct.android.lite.permission.READ" /> 

В общем, вам необходимо:

  1. Определить разрешение в одном из файлов манифеста приложений
  2. Запросить разрешение в любом из файлов манифеста ваших приложений, для приложений, которые хотят получить разрешение
  3. Требуется это разрешение в любом компоненте, который вы хотите защитить с помощью этого разрешения, например, «Действия, службы» или «ContentProviders» (чтение, запись, и то, и другие суб-URI и т. Д.),

Изменить: так, чтобы быть на 100% понятным, недостаточно «неявно» определять разрешение, требуя его, скажем, у вашего ContentProvider. Вы должны явно определить его в файле манифеста приложения (в <manifest/> ).