内容提供者的应用程序如何指定客户端应用程序需要访问提供者数据所需的权限?

14

背景

我正在阅读这篇关于Android内容提供者的教程。从教程中我了解到:

为了让其他应用程序访问内容提供者的数据,提供者应用程序必须指定客户端应用程序需要具有的权限来访问其提供者的数据。

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

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

然后APK管理器在用户安装客户端应用程序时会要求用户同意这些权限(在客户端应用程序中)。

问题

我的问题是,提供者(应用)如何指定其他客户端应用程序必须被授予哪些权限以便它们能够访问提供者的数据?

开发者指南中可以了解到:

 

要查找所使用的提供程序的读取访问权限的确切名称,以及提供程序使用的其他访问权限的名称,请参阅提供程序的文档。

那么,在提供者应用中指定这些权限的方式是通过提供者的文档吗?如果是,那么在哪里可以找到该文档?我在教程中使用的SearchableDictionary提供程序的文档在哪里可以找到?如果我在我的应用程序中编写内容提供程序,我应该在哪里提供该文档呢?

2个回答

31
在提供者应用的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);

非常感谢您提供了如此清晰的答案。但是我仍然对我从开发人员指南中引用的关于“提供程序文档”的引语有些困惑:他们所说的文档是什么?您有任何想法吗? - Solace
但是我现在清楚了,我可以查看提供程序应用的清单来知道权限的名称。所以谢谢你。 - Solace
@Solace,我也遇到了你的问题,请问你在这个例子中是在哪里找到UserDictionary的清单文件的? - hamid_c
就像这样,我创建了一个内容提供者应用程序(充当服务器)和另一个访问数据的应用程序(充当客户端)。我还创建了权限并在清单中使用了它们。但是在客户端应用程序中,权限并不总是被授予。请前往以下链接查看详细信息:http://stackoverflow.com/q/42022121/385138 - SIVAKUMAR.J
这正是我正在寻找的解决方案。谢谢你,伙计!:D - Qazi Fahim Farhan

3
在客户端(B应用程序)中不要忘记在AndroidManifest.xml中包含此外部内容...这对我有用。

<queries>
        <provider android:authorities="com.myapp.MyProvider.AUTHORITY" />
    </queries>


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接