Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android联系人:是否可以使用URN引用给定的联系人条目?_Android_Sqlite_Android Contacts - Fatal编程技术网

Android联系人:是否可以使用URN引用给定的联系人条目?

Android联系人:是否可以使用URN引用给定的联系人条目?,android,sqlite,android-contacts,Android,Sqlite,Android Contacts,让我试着澄清我的意图 我正在开发一个可以访问Android联系人提供商的应用程序。我已经实现了一种从contacts提供者中提取联系人并将结果存储在SQLite表中的机制。目前,当我查询联系人ID的结果时,我可以检索该联系人的所有数据、电话号码、电子邮件地址等 但是,为了指定我的应用程序在将来的场合应该使用哪些联系人,我必须在SQL表中存储生成的联系人数据(例如CommonDataTypes.Phone.NUMBER、CommonDataTypes.Phone.TYPE等) 如果Android联

让我试着澄清我的意图

我正在开发一个可以访问Android联系人提供商的应用程序。我已经实现了一种从contacts提供者中提取联系人并将结果存储在SQLite表中的机制。目前,当我查询联系人ID的结果时,我可以检索该联系人的所有数据、电话号码、电子邮件地址等

但是,为了指定我的应用程序在将来的场合应该使用哪些联系人,我必须在SQL表中存储生成的联系人数据(例如CommonDataTypes.Phone.NUMBER、CommonDataTypes.Phone.TYPE等)

如果Android联系人提供程序中的数据已更改,则会出现问题。我考虑过的一个解决方案是重新查询_ID并存储已更改的数据。但是,实施这样的解决方案需要收集该联系人的所有数据,因此很难确定要使用的正确联系人数据

因此,我的问题是:

Android提供商的联系人数据中是否使用了与提供商的联系人条目本身相同的唯一记录键?相当于联系人的电话号码或电子邮件地址。\u ID


否则,Android联系人提供商是否会存储上次修改的日期和时间?我希望,如果我无法引用提供商中的联系人数据,我至少可以运行一次检查,看看自从选择在应用程序中使用联系人以来,是否有任何更改,从而允许我的应用程序提醒用户数据已更改。

Yoi可以在服务的帮助下使用ContentObserver监控联系人的更改或更新

比如说-

扩展contentObserver-

public class Contact_change extends ContentObserver
注册内容观察者-

Contact_change changeObserver = new Contact_change();
getContentResolver().registerContentObserver(ContactsContract.Contacts.CONTENT_URI, true,chageobserver);

通过使用此功能,您可以监视联系人更改并更新数据库。

因此,在查看可能的情况时,我通过对平板电脑进行本地化记录转储,发现了一些有趣的发现

我问问题时错误地提到了电话号码。它在那里,但它引用了任何给定联系人的个人记录。这可能有用,可能正是我所希望的,但也可能是一条死胡同

到目前为止,我已经使用Android Contacts Provider检索了一个联系人,它返回联系人的数据,包括下面的字段

ContactsContract.Contacts._ID
ContactsContract.Contacts.DISPLAY_NAME
将_ID分配给字符串并在查询中使用后,我最初在ContactsContract.Data._ID字段中搜索_ID,但该字段没有按预期工作

那时我才意识到我做错了。我需要将搜索应用于contacts contract.Data.CONTACT\u ID,然后它检索所选联系人的所有相关数据记录

更正错误并重新运行查询后,我找到了联系人ID的一系列记录,每个记录都有自己的“唯一”ID(照片和二进制数据除外,它们都有对联系人ID的空引用)

现在的问题是:即使电话号码、电子邮件地址或IM条目被修改,而不是被删除和重新创建,这个数据引用是否也会改变?我可能会通过进一步的测试发现,但我想问是否有人已经尝试过这个方法

最终,我希望我的内部SQL表只能存储每个条目的联系人ID和联系人ID,依靠对Android提供商的回调来提取相关值。这样,我可以确保我的应用程序中显示的数据在应用程序和设备上存储的联系人数据之间是最新的

结合这里提供的变更通知程序代码,我应该能够提醒用户任何可能需要他们采取行动的变更

更新:

更多的调查显示,通过条目编辑,与给定联系人条目关联的UID被保留

UID在删除时明显丢失,在我的简短测试中,我没有发现UID被回收。这至少解决了我的引用完整性问题,因为UID不会突然引用另一条不知从何而来的记录


其他任何人想要引用联系人提供程序中的个人条目的结果是,这是可能的,并且您只能存储_ID,仍然可以检索提供程序中的个人条目。

感谢更新建议。我将根据我的代码调整它,并尽快对其进行一些测试。