【问题标题】:Provide contacts from ContentProvider to standard Contact app提供从 ContentProvider 到标准联系人应用程序的联系人
【发布时间】:2018-03-06 06:57:20
【问题描述】:

我试过搜索,但我什至不能用简短的形式提出问题。

  1. 我有SQLite 表,ID/用户名/手机/电子邮件。
  2. 我已经为它创建了ContentProvider
  3. 我已经通过 AccountManager(AccountAuthenticator) 创建了帐户

一切正常,我可以使用我的函数Sqlite2Contacts 创建联系人。 IE。我提供给ContactsContract 的每个SQLite 记录以及我的帐户名称和类型。通过标准应用程序可见的所有联系人,当我删除帐户时,所有联系人也被删除。

一切正常,但是......我想我错过了一些东西。我想这应该是它的一些框架。

即我将我的 ContentProvider 绑定到...使用某种适配器而无需手动同步联系人的东西。

我需要的唯一答案是我能不能做,而不是执行。如果可以的话……我应该使用什么类/框架/适配器。

【问题讨论】:

  • 我不明白这个问题,如果您在设备的联系人应用程序中看到您应用程序的联系人,并且所有这些联系人都在您自己的帐户中,那么听起来一切正常。你认为你缺少什么?顺便说一句,你读过这个:blog.udinic.com/2013/07/24/write-your-own-android-sync-adapter 吗?
  • 我现在就读。关于你的问题。我在手动模式下通过我的函数 SQlite2Contacts 完成的问题。第一步中的函数从 ContactContract 中删除联系人,该联系人不再存在于 SQlite 中。更新那些存在但已更改的内容,而不是创建那些不存在的内容。在我看来,所有这些都浪费了我认为 android 可以做得更快、更正确的事情的处理时间。我只是希望我不要触摸 ContactContracts,而 Android 只是从我的 ContentProvider 获取这些数据。如果可能的话
  • 知道了,我会把我的想法作为答案

标签: android android-contentprovider android-contacts contactscontract


【解决方案1】:

听起来你走错了方向,你不应该将应用的联系人放在ContentProvider 中。

要将应用特定的联系人放入 Android 的联系人数据库中,您的应用需要两个组件:Account 和 SyncAdapter。

Account 允许用户进行身份验证(如果需要)并手动删除/同步您应用的联系人。 SyncAdapter 由系统调用或由您的应用程序以编程方式调用,并将RawContacts 同步到您应用程序的ACCOUNT_TYPE + ACCOUNT_NAME 下的联系人数据库中。

有两个 Udi 教程供你参考:

官方教程在这里:
https://developer.android.com/guide/topics/providers/contacts-provider.html
How to write a sync adapter for synchronizing data from your server to the Contacts Provider下)

【讨论】:

  • 谢谢。所以简短的回答是 ContentProvider 不能透明地向 ContacContract 提供数据,我的手动同步没有更多的“原生”方式。关于教程(1 阅读其中一个同步适配器部分)并且在几分钟内它有点过时了。我以前读过官方,它对我更有用。我只是认为不手动编辑 ContactContract DB 更合乎逻辑,而只是将其链接到某种 ContentProvider 适配器,该适配器在需要时获取数据。再一次感谢你。说错误的方向也有帮助并节省我的时间)
猜你喜欢
  • 2013-01-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-19
  • 1970-01-01
  • 2017-01-16
  • 1970-01-01
  • 2016-05-17
相关资源
最近更新 更多