Android内容提供程序的AUTHORITIES

17
什么是内容提供者权限的原因?
除了在清单文件中声明必须使用它们之外,我如何/为什么要使用它们?
我试图对这个问题做功课,但无法找到一个合理、连贯的讨论。以下是我能找到的最好的资料(除了我拥有的四本Android开发书籍):
  1. https://stackoverflow.com/search?q=content+provider+authority
  2. Content Providers, Authority and and URI matching
  3. Get a list of available Content Providers
  4. http://developer.android.com/guide/topics/manifest/provider-element.html
  5. http://developer.android.com/guide/topics/providers/content-provider-creating.html

1
它用于标识特定的提供程序,例如 content://your.authority。 - pskink
2个回答

25

Authority用于与特定内容提供程序进行交互,这意味着它必须是唯一的。这就是为什么良好实践是将其声明为您的域名(反向)加上包含提供程序的名称,这样其他开发者创建声明相同权限的应用程序的可能性就较小了。

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

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

它的工作方式类似于http网址中的域名:

http://domain-name/data-in-the-site

那么这是否意味着,如果我的应用程序中有多个提供者,每个提供者都应该在自己的包中? - Moha the almighty camel
每个内容提供者的权限需要是唯一的。 - ILovemyPoncho
简单而强大的解释,没有任何一堆废话代码。 - Nirmal

3

我也想解释并补充ILovemyPoncho提供的答案,我遇到了这个特定的答案,引用如下:

android:authorities具体是在要求什么?

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

您在最后使用该字符串通过Uri与您的提供程序通信,例如:

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

这样说吧:有一只看不见的手在促进您对应用程序ContentProvider的请求。

例如:

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

基本上,你在这里告诉Android OS,在包含你在XML中定义的授权的URI中插入数据。操作系统将搜索特定的内容提供程序并将请求发送到它。你的ContentProvider上的“插入”方法将被调用,你必须匹配URI以相应地处理它。
此外,如果你的内容提供程序非常简单,其他人也有类似的权限,那该怎么办?我还没有遇到过我提到的这两个问题,但我认为这不是什么好事情。
授权存在的目的是确保操作系统了解哪个提供程序将向请求的应用提供数据,并确保提供者提供它。

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