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

时间:2015-05-07 09:43:35

标签: android permissions android-manifest android-contentprovider android-contentresolver

背景

我正在阅读this tutorial on Android Content Providers。我从本教程中了解到,

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

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

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

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

问题

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

来自developer guide

  

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

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

1 个答案:

答案 0 :(得分:18)

在提供商应用的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标记

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

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

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