【问题标题】:android content provider AUTHORITIESandroid 内容提供商 AUTHORITIES
【发布时间】:2014-06-12 16:41:16
【问题描述】:

内容提供商权限的原因是什么?

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

我已经尝试在这个问题上做功课,但找不到关于这个主题的体面、有凝聚力的讨论。 这是我能找到的最好的(除了我拥有的四本关于 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

【问题讨论】:

  • 它用于识别特定的提供者 e。 G。 content://your.authority

标签: android android-contentprovider authority


【解决方案1】:

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

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

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

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

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

【讨论】:

  • 这是否意味着如果我的应用中有多个提供程序,每个提供程序都应该在自己的包中?
  • 每个内容提供者的权限必须是唯一的
  • 简单而强大的解释,没有任何一堆废话。
【解决方案2】:

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

android:authorities 究竟要求什么?

您的提供商的系统范围的唯一标识符。或在全球范围内更好 独特。所有提供者都已在系统中注册,他们需要 是唯一的,或者第二个想要使用相同名称的应用程序不能是 已安装。

您最终使用该字符串通过以下方式与您的提供商进行通信 一个 Uri 像

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

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

例如:

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

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

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

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

【讨论】:

    猜你喜欢
    • 2011-04-18
    • 1970-01-01
    • 1970-01-01
    • 2013-07-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多