了解Android联系人的架构

2024-02-28

我正在开发一个 Android 应用程序,它需要知道何时添加/更新/删除联系人。

所以我读了几篇文章。据我所知,每当联系人发生更改时,我们都可以通过内容观察者收到通知,但我们无法获取已添加/更新/删除的联系人。因此,我阅读了官方 API 并准备了如何捕获该特定联系人的设计。

所以我一开始是这么想的

  1. 我们将存储所有联系人Is、删除标志和版本
  2. 每当联系人发生变化时,我都会从 Android 系统获取表的行数和行数。
  3. 如果我的行计数小于系统行计数,则联系人已被删除。
  4. 如果我的行计数大于系统行计数,则已添加联系人。
  5. 如果情况并非如此,则其中一个联系人版本已更改。

我还了解到,如果用户删除了联系人,Android 不会删除该联系人,但它会在已删除标志上设置 0。因此在这些情况下行数将相同。

Android 还会多次更改联系人的行 ID,如官方文档中所述。那么我们如何才能像查找 uri 一样唯一地识别它们,如果不能,那么我们也必须为其设置观察者。

所以我想知道上面的说法是否正确?在添加联系人的情况下,它是否会添加到光标的最后一行意味着如果我检查系统数据库的最后一行是否有联系人,它是否会给我添加的联系人。


让我尽可能解释一下。基本上你的政策看起来不错,但实际上比你想象的要复杂一些。

在安卓上,一个联系人可以与多个相关联raw联系人 http://developer.android.com/reference/android/provider/ContactsContract.RawContacts.html,可能由许多数据提供商提供,例如 Google、Facebook、Skype 等。例如,如果您的本地联系人中的一位朋友也在使用 Skype,则有两个原始联系人分别存在于ContactContracts.RawContacts http://developer.android.com/reference/android/provider/ContactsContract.RawContacts.html,但它们会自动聚合,并在您查询时显示为一个联系人ContactsContract.Contacts http://developer.android.com/reference/android/provider/ContactsContract.Contacts.html.

这也是为什么很难唯一地识别联系人的原因,因为随时都可以。LOOKUP_KEY对于这种情况不太方便。

除 Google 之外的许多应用程序仅提供单向同步,i.e.仅从服务到联系人,因此它们是只读的。在这种情况下,删除标志将不会被使用,而是在同步过程中被删除。因此,你不能简单地依赖标志。

尽管没有一个好的简单解决方案,但我想如果您观察特定的情况,实现您想要的目标会容易得多RawContacts, not Contacts。希望这有助于您的理解。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

了解Android联系人的架构 的相关文章

随机推荐

  • Docker 出现 cmake 错误:ForceToRelativePath 失败

    我一直在尝试使用cmake在docker中编译一个项目 但是 我收到以下错误 cmake build cmake pCygIN cmake 3 13 4 Source cmOutputConverter cxx 125 static std
  • 带有 animate.css 的猫头鹰轮播标题

    我正在尝试在猫头鹰轮播中制作字幕 我正在使用 animate css 我已在轮播中的字幕中添加了动画 但它并不适用于所有人 只有第一张幻灯片的标题有动画 这是我的代码 div class owl carousel owl theme div
  • NSIncation 和 block 有什么区别?

    当我说阻止时 我的意思是 int a return a a 另外 block仅支持iOS4及以上版本 这两者有什么区别 An NSInvocation是一条发送给对象的消息 使用选择器 带有可选参数 可以稍后 或现在 执行 并且在当前上下文
  • 更改 Nestjs 中的 dist 目录

    我正在构建一个基于 Nestjs 的 API 这main ts文件嵌套在 my 的子文件夹中src目录 结果 编译后的文件也嵌套在dist目录和我的入口点是dist api main js代替dist main js 我希望保持这种状态 当
  • 强制 SHBrowseForFolder() 显示所需的目录

    我已经在网上搜索并与这件事斗争了一个多小时 但似乎仍然无法让它发挥作用 大多数人在论坛等上看到这里时似乎很满意 但我的仍然不起作用 我试图强制 SHBrowseForFolder 函数在我选择的文件夹中启动 char current MAX
  • 强制另存为,MS Excel VBA

    我对 MS Office 产品中的 VBA 有点陌生 我一直在寻找一些代码 这些代码将强制用户 另存为 我用作模板的 xls 文件 但它不是实际的模板文件类型 基本上 我有这个 用户打开 xls 在某个字段中输入一些数据 然后文件 gt 另
  • 具有动态参数的表达式树

    我想转换这个 Func
  • 在 try catch 中访问变量

    我在返回 menuFont 行上不断收到编译错误 它表示没有变量 menuFont 有人可以告诉我如何解决这个问题吗 import java awt Font import java awt FontFormatException impo
  • 发送电子邮件的代码

    我在这里做错了什么 private void SendMail string from string body string mailServerName plus pop mail yahoo com MailMessage messag
  • 删除字符串中的空格

    我必须摆脱超过 1 个空格也就是说 如果有超过 1 个空格 我会将其替换为单个空格 这就是我的做法 但我真的很困惑哪种方法是最好的方法以及所有这些方法有什么区别 下面是我的代码 public class SspaceDemo public
  • 已弃用的 API 和旧版 API 之间的区别?

    我正在研究 Java 中的遗留 APICollection Framework我了解到诸如此类的课程Vector and HashTable已被取代ArrayList and HashMap 然而 它们仍然没有被弃用 并且被视为遗留 本质上
  • WordPress 的 Docker 运行缓慢

    Problem 我在使用 WordPress 和 Docker 时遇到问题 因为我的网站加载时间很慢 7 秒 我不确定为什么会发生这种情况 但我认为这与外部数据库或共享卷有关 Setup 我有一个使用 XDebug 和 Mailhog 在
  • C++ - 如何找到整数的长度

    我试图找到一种方法来查找整数的长度 位数 然后将其放入整数数组中 该作业还要求在不使用 STL 中的类的情况下执行此操作 尽管程序规范确实说我们可以使用 通用 C 库 我会问我的教授是否可以使用 cmath 因为我假设 log10 num
  • salesforce 中的联合身份验证和委派身份验证

    有人知道 salesforce 中的联合身份验证和委托身份验证之间的区别吗 您能解释一下这两种方法中的请求流程吗 主要区别在于联合身份验证上安全断言标记语言 SAML 的使用 委托认证如果您的组织中有移动用户 或者您想要启用委派身份验证 单
  • 如何判断我的应用程序是否从后台恢复?

    我想在应用程序进入后台时锁定它 当它恢复时我想显示我自己的锁定屏幕 锁屏是我的应用程序的一个活动 成功输入密码后 用户可以看到恢复的 Activity 否则他不能 我怎样才能做到这一点 主要问题是 当你开始一个项目时 你必须得到一个特定的行
  • 如何在 Django 中将两个模型字段表示为一个表单字段?

    我似乎无法弄清楚如何在 Django 中正确处理以下情况 我在模型中有一个日期范围 我将其存储为两个单独的字段 date start and date end start date models DateTimeField end date
  • 如何解决 C++ 中友元声明的循环依赖?

    为什么以下代码无法编译以及如何修复它 我得到的错误是 使用未声明的标识符 Foo 虽然Foo在错误发生的地方 在friend声明于Bar foo h ifndef FOO H define FOO H include bar h neede
  • 使用位掩码组合枚举值

    我知道可以在枚举值中使用位掩码 但我不知道如何创建它 我有一个简单的枚举 enum State minimizing 0 maximizing minimized maximized 状态总是State minimized or State
  • 在同一行初始化两个变量

    我很难找到这个概念的权威例子或讨论 如果我的 Ruby 方法中有 2 个数字变量 我需要将它们初始化为零 它们将用作计数器 这可以吗 安全吗 它在我的测试中有效 而不是这个 foo 0 bar 0 你可以这样做 foo bar 0 这似乎是
  • 了解Android联系人的架构

    我正在开发一个 Android 应用程序 它需要知道何时添加 更新 删除联系人 所以我读了几篇文章 据我所知 每当联系人发生更改时 我们都可以通过内容观察者收到通知 但我们无法获取已添加 更新 删除的联系人 因此 我阅读了官方 API 并准