Как приложение контент-провайдера определяет разрешения, необходимые клиентским приложениям для доступа к данным поставщика?

ОБЩАЯ ИНФОРМАЦИЯ

Я читаю это руководство по контент-провайдерам Android. Из этого урока я понял, что

Чтобы другие приложения могли получить доступ к данным контент-провайдера, приложение-поставщик должно указать разрешения, которые клиентские приложения должны иметь для доступа к данным своего поставщика.

Клиентские приложения указывают требуемые разрешения в своем файле манифеста, используя элемент <uses-permission>, например.

<uses-permission android:name="android.permission.READ_USER_DICTIONARY" > <!-- In the client app's manifest -->

Затем менеджер APK запрашивает согласие пользователя на эти разрешения (в клиентском приложении), когда пользователь устанавливает клиентское приложение.

ВОПРОС

Мой вопрос заключается в том, как поставщик (приложение) указывает разрешения, которые должны быть предоставлены другим клиентским приложениям, чтобы они могли получить доступ к данным поставщика?

Из руководства для разработчиков.

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

Таким образом можно указать эти разрешения в приложении поставщика — в документации поставщика? Если да, то где найти эту документацию? Где я могу найти эту документацию для поставщика SearchableDictionary (используется в качестве примера в руководстве), и если я напишу Content Provider в своем приложении, где я должен предоставить эту документацию?




Ответы (1)


Определить разрешение в файле AndroidManifest.xml приложения поставщика.

<permission
    android:name="com.myapp.PERMISSION"/>

Определите поставщика в файле AndroidManifest.xml приложения поставщика.

<provider
        android:name=".MyProvider"
        android:authorities="com.myapp.MyProvider.AUTHORITY"
        android:enabled="true"
        android:exported="true"
        android:multiprocess="true"
        android:readPermission="com.myapp.PERMISSION" />

AndroidManifest.xml клиента должен иметь тег разрешения использования.

<uses-permission android:name="com.myapp.PERMISSION"/>

Затем клиент может получить доступ к провайдеру

Cursor cursor = getContentResolver().query(
Uri.parse("content://com.myapp.MyProvider.AUTHORITY/xxx" ),null, null, null, null);
person Leo Lin    schedule 07.05.2015
comment
Большое спасибо за очень четкий ответ. Но меня все еще немного смущает цитата, которую я цитировал из руководства для разработчиков о документации поставщика: о какой документации они говорят? Есть ли у вас какие-либо идеи? - person Solace; 13.06.2015
comment
Но теперь мне ясно, что я могу заглянуть в манифест приложения поставщика, чтобы узнать имя разрешения. Так что спасибо тебе. - person Solace; 13.06.2015
comment
@Solace У меня была именно ваша проблема, не могли бы вы сказать мне, где вы нашли в этом примере файл манифеста UserDictionary ??? - person hamid_c; 24.10.2015
comment
Как и то же самое, за мной последовали. Я создал одно приложение для поставщика контента (действующее как сервер) и другое приложение для доступа к данным (действующее как клиент). Я также создал разрешения и также использовал их в манифесте. но в клиентском приложении разрешения всегда не предоставляются. Перейдите по ссылке и ознакомьтесь с подробностями stackoverflow.com/q/42022121/385138 - person SIVAKUMAR.J; 08.02.2017
comment
Это именно то решение, которое я искал. Спасибо чувак! :D - person Qazi Fahim Farhan; 29.10.2019