【问题标题】:How to have other apps know what CONTENT_URI to look for?如何让其他应用知道要查找的 CONTENT_URI?
【发布时间】:2016-05-04 05:25:10
【问题描述】:

我一直在研究有关内容提供程序的所有内容,但我无法理解手机上安装的其他应用程序如何访问我提供的内容的概念。 其他应用怎么可能知道我的 CONTENT_URI 是什么???

我正在制作一个联系人应用程序。其他应用程序如何获取我存储的联系人数据,其他应用程序似乎不可能知道我为 CONTENT_URI 设置的内容。 如果其他应用程序需要基本上知道只有我知道的密钥是什么,这难道不会破坏内容提供的全部目的吗?

我希望其他应用程序可以看到我的联系人应用程序数据,而不是忽略我的,而只查看库存的联系人应用程序以获取数据。

如果 Android 会创建 ContactsContract 提供程序,如果这会导致开发人员使用它来获取联系人数据,因此默认情况下会使所有其他 3rd 方联系人应用程序过时,因为其他开发人员编写代码本质上只是为了从中获取联系人数据库存的 Android 联系人应用程序?

Android 似乎并没有为我提供使用 ContactsContracts 提供程序向其他应用程序提供数据的功能。然而,粗糙的 Android 使其非常清晰、简单,并鼓励需要联系人数据的开发人员使用 ContactsContract。

这是公然的权力争夺吗?我的联系人应用程序的全部目的是让我的联系人数据更加安全,以便 Google 无法收集这些数据(如果他们选择)或其他任何人。

请问有人可以建议吗?这不可能是正确的,我希望我在这里误解了。再次仅供参考,我在 Android 开发者页面上没有找到任何与我遇到的问题相关的内容。

【问题讨论】:

  • 使用联系人 ContentProvider 优于库存联系人存储 ContentProvider 有什么好处?作为用户或应用开发者,我为什么要这样做?
  • 我当然更愿意使用 ContactsContract 提供程序而不是创建我自己的提供程序,但不幸的是,这就是问题所在。我似乎无法像股票应用程序那样向其他应用程序提供联系数据。我正在构建一个 100% 替代联系人应用程序,您的联系人数据更安全。另外,我只是认为股票应用程序丑陋而笨拙,我可以做得更好。我希望我的供应商准确地提供股票应用程序的数据。为什么 android 不能发布关于我如何做到这一点的文档?这怎么公平?
  • 你为什么不写一个 SyncAdapter 并将你自己的数据写入默认的 ContactsProvider 呢?您还可以编写自己的使用常用 ContactsProvider 的联系人应用程序。顺便说一句,股票联系人应用程序和股票联系人存储是 2 个独立的应用程序。库存联系人应用程序只是库存联系人提供程序的“前端”。您可以编写自己的“前端”(就像之前的其他人一样)。

标签: android android-contentprovider android-contacts contactscontract


【解决方案1】:

这绝对不是权力争夺。联系人被嵌入到操作系统中,因为用户需要他们的手机存储电话号码以及与该电话号码相关联的姓名和其他信息。除了让用户可以选择将他们的联系人同步到云端之外,谷歌并没有做任何与当时翻盖手机不同的事情。但是,这不是必需的。用户可以将联系人添加到他们的手机中,然后将其与手机相关联。

ContactsContract 允许应用访问存储在设备上的联系人,这只有在用户授予应用访问其联系人的权限后才能实现。有些应用程序使用此功能充当联系人管理器(以不同布局显示用户联系人的应用程序)。一些应用程序为用户提供在线备份联系人的服务,以防用户不想使用 Google(例如 FullContact)。但是,大多数应用通常会出于其他原因读取联系人,例如帮助用户找到在其应用中拥有帐户的朋友/熟人/同事/等。

为了解决其他开发者如何实现应用的 CONTENT_URI 的问题,他们通过阅读开发者的文档来实现。如果您是提供内容的开发者,那么您有责任发布必要的文档,以便让其他开发者了解如何使用您的应用。

【讨论】:

  • 所有联系人数据只需存储在数据库中。然后内容提供程序使其易于使用。那是我通过阅读 Android 开发者网站了解到的 Android 模型。我完全了解 ContactsContract 提供商的工作原理。我需要知道如何在我的代码中使用它来提供数据,而不是检索它。谷歌似乎不允许这样做?为什么会这样?感谢您提供有关为其他开发人员发布我的提供程序的信息。我担心这是我唯一的选择,可能不得不选择那条路线
  • @JamisonMan111 您可以通过将数据写入股票联系人提供程序来提供数据。这就是所有其他应用程序的做法。无意冒犯,但我认为您不了解 Android ContentProviders,或者我仍然不明白您要实现的目标是使用普通的 ContactsProvider 无法完成的。
  • 没有冒犯我感谢您的帮助。我认为我理解内容提供者是因为我使用它们,尽管不经常使用。我想我应该尝试将我的数据写入 ContactsContract,我没有意识到这是一种选择。我的主要担忧之一是我不希望我的联系信息与手机上的谷歌账户绑定。使用 Nexus 6,Android 5.1.1,不再有保持联系人“本地”的选项。我输入的任何联系人现在都是手机上 Google 帐户的一部分,我希望我的信息不公开。
猜你喜欢
  • 2020-08-14
  • 1970-01-01
  • 2011-08-30
  • 1970-01-01
  • 1970-01-01
  • 2017-01-26
  • 2011-06-10
  • 1970-01-01
  • 2012-07-02
相关资源
最近更新 更多