17

内容提供商当局的原因是什么?

除了必须在清单中声明它们之外,我如何/为什么要使用它们?

我试图在这个问题上做我的功课,但找不到关于这个话题的体面、有凝聚力的讨论。这是我能找到的最好的(除了我拥有的四本关于 Android 开发的书):

  1. https://stackoverflow.com/search?q=content+provider+authority
  2. 内容提供者、权限和 URI 匹配
  3. 获取可用内容提供者的列表
  4. http://developer.android.com/guide/topics/manifest/provider-element.html
  5. http://developer.android.com/guide/topics/providers/content-provider-creating.html
4

2 回答 2

24

授权用于与特定的内容提供者进行交互,这意味着它必须是唯一的。这就是为什么将其声明为您的域名(反向)加上包含提供程序的包的名称是一种很好的做法,这样其他开发人员就不太可能创建一个内容提供程序声明相同权限的应用程序。

您在清单中声明它,以便您的应用程序和其他应用程序(如果您允许它们)可以通过您的内容提供者以 uri 的形式操作数据:

content://authority-name/data-in-the-provider

它的工作方式类似于 http url 中的域:

http://domain-name/data-in-the-site
于 2014-06-12T19:33:42.937 回答
3

我也在寻找解释并添加到 ILovemyPoncho 提供的答案,我点击了这个特定的答案并引用:

android:authorities 到底要求什么?

您的提供商的系统范围的唯一标识符。或者更好的全球独一无二。所有提供程序都已在系统中注册,并且它们必须是唯一的,否则无法安装想要使用相同名称的第二个应用程序。

您最终使用该字符串通过 Uri 与您的提供者进行通信,例如

Uri uri = Uri.parse("content://" + "your.authoritiy.string")

让我们这样说吧:有一只看不见的手帮助您向应用程序的 ContentProvider 提出请求。

例如:

    Uri uri = mContext.getContentResolver().insert(NotifireContentProvider2.NOTE_URI, values);

基本上,您在这里对 Android 操作系统所说的是在给定包含您在 XML 中定义的权限的 URI 的情况下插入数据。操作系统将搜索这个特定的内容提供者并将请求发送给它。您insert在 ContentProvider 上的方法将被调用,并且您必须匹配 URI 以相应地处理它。

此外,如果您是内容提供者如此简单,以至于其他人也拥有类似的权限,该怎么办。我没有遇到我提到的这两个问题,但我认为这不会令人愉快。

授权是为了确保操作系统了解哪个提供商将向请求的应用程序提供数据,并确保是提供数据的提供商。

于 2016-06-23T08:14:25.303 回答