Content Provider的应用程序如何指定客户端应用程序访问提供程序数据所需的权限?

Sol*_*ace 10 permissions android android-manifest android-contentresolver android-contentprovider

背景

我正在阅读Android内容提供商的本教程.我从本教程中了解到,

为了让其他应用程序访问Content Provider的数据,提供者应用程序必须指定客户端应用程序访问其提供者数据所需的权限.

客户端应用程序使用该<uses-permission>元素在其清单文件中指定所需的权限,例如

<uses-permission android:name="android.permission.READ_USER_DICTIONARY" > <!-- In the client app's manifest -->
Run Code Online (Sandbox Code Playgroud)

然后,当用户安装客户端应用程序时,APK管理员会询问用户是否同意这些权限(在客户端应用程序中).

我的问题是,提供商(app)如何指定必须授予其他客户端应用程序的权限才能访问提供商的数据?

开发者指南,

要查找您正在使用的提供程序的读访问权限的确切名称,以及提供程序使用的其他访问权限的名称,请查看提供程序的文档.

那么在提供者应用程序中指定这些权限的方式是什么 - 在提供者的文档中?如果是这样,那文档在哪里找到了?我在哪里可以找到SearchableDictionary提供程序的文档(在教程中用作示例),如果我在我的应用程序中编写Content Provider,我应该在哪里提供该文档?

小智 21

在提供者应用程序的AndroidManifest.xml中定义权限

<permission
    android:name="com.myapp.PERMISSION"/>
Run Code Online (Sandbox Code Playgroud)

在提供者应用程序的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" />
Run Code Online (Sandbox Code Playgroud)

客户端的AndroidManifest.xml应具有uses-permission标记

<uses-permission android:name="com.myapp.PERMISSION"/>
Run Code Online (Sandbox Code Playgroud)

然后客户端可以访问提供者

Cursor cursor = getContentResolver().query(
Uri.parse("content://com.myapp.MyProvider.AUTHORITY/xxx" ),null, null, null, null);
Run Code Online (Sandbox Code Playgroud)