gpt4 book ai didi

android - 以编程方式获取Android中联系人的最后更新时间

转载 作者:搜寻专家 更新时间:2023-11-01 09:37:31 25 4
gpt4 key购买 nike

我一直在尝试编写一个 android 程序来同步服务器上的联系人。我已经实现了同步部分现在我想维护差异部分,例如只有那些自上次服务器推送以来已更新的联系人可能会在下一次服务器调用中被推送。我正在使用 ContactsContract.Contacts.CONTACT_LAST_UPDATED_TIMESTAMP 来关注联系人的最后更新时间戳。它也正常工作,因为它告诉我联系人何时更新但是有一个问题,每当我调用任何联系人时,它的 CONTACT_LAST_UPDATED_TIMESTAMP 也会更新,就好像联系人现在已被修改一样。我不希望这发生。我只想要联系人的确切最后更新时间或通过任何其他方式来处理上述情况。欢迎提出建议。这是我的代码

    String phoneNumber = null;

String _ID = ContactsContract.Contacts._ID;
String DISPLAY_NAME = ContactsContract.Contacts.DISPLAY_NAME;


String Phone_CONTACT_ID = ContactsContract.CommonDataKinds.Phone.CONTACT_ID;
String CONTACT_LAST_UPDATED_TIMESTAMP = ContactsContract.Contacts.CONTACT_LAST_UPDATED_TIMESTAMP;
String Contact_last = ContactsContract.CommonDataKinds.Phone.CONTACT_LAST_UPDATED_TIMESTAMP;
String NUMBER = ContactsContract.CommonDataKinds.Phone.NUMBER;
ContentResolver contentResolver = appContext.getContentResolver();
Cursor cursor = contentResolver.query(CONTENT_URI, null, null, null, null);

ArrayList<Contact> contacts = new ArrayList<>();

if (cursor!= null && cursor.moveToFirst() && cursor.getCount() > 0) {
do {

long activity_at = cursor.getLong(cursor.getColumnIndex(CONTACT_LAST_UPDATED_TIMESTAMP));
if(activity_at <= prevActivityTime) {

continue;
}
// Create a contact object
Contact contact = new Contact();

// Fetch contact id and contact name
String contact_id = cursor.getString(cursor.getColumnIndex(_ID));
String contactName = cursor.getString(cursor.getColumnIndex(DISPLAY_NAME));






} while (cursor.moveToNext());
cursor.close();
}

这里的 preActivityAt 是一个具有前一天时间戳的变量,即从昨天到今天更新的联系人应该被推送到服务器

最佳答案

当您调用(或接听)联系人时,值位于: ContactsContract.Contact.TIMES_CONTACTED , ContactsContract.Contact.LAST_TIME_CONTACTED改变。

所以实际上 Contact 在数据库中更新了,因此它的 LAST_UPDATED 时间戳也更新了。

如果您不关心这两个值,则比较您从该联系人获得的最后联系方式与新联系方式之间的差异,如果没有字段对您很重要已更改,请跳过该联系人。

更新

为了避免将所有联系人的所有详细信息存储在应用程序本地数据库中,您可以计算一个哈希值(单个长整数),它代表当前为联系人保存的字段,如果最近更新的新哈希值联系人与之前的哈希值不同,您知道联系人已修改(在您关心的字段上),并且您需要同步该联系人。

有关如何计算 Java 对象的良好哈希值的信息:Java: Getting a unique hash value of an object

关于android - 以编程方式获取Android中联系人的最后更新时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41937776/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com