我一直在嘗試編寫一個通過服務器同步聯繫人的android程序。我已經實現了同步部分現在,我想維護差異部分,例如只有那些自上次服務器推送可能在下次服務器調用中被更新後更新的聯繫人。 我正在使用ContactsContract.Contacts.CONTACT_LAST_UPDATED_TIMESTAMP來關注聯繫人的上次更新時間戳。它也正常工作,因爲它告訴我何時更新聯繫人但是有問題,每當我撥打任何聯繫人的電話時,它的CONTACT_LAST_UPDATED_TIMESTAMP也會得到更新,就好像聯繫人已經被修改了一樣。我不希望發生這種情況。我只需要確切的上次更新聯繫時間或通過其他任何方式來處理上述情況。歡迎提出建議。這裏是我的代碼以編程方式獲取最新的聯繫人在Android的時間
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是具有前一天即接觸從昨天更新的時間戳到今天應該被推到服務器
爲了這個,我不得不保持在我的Android新的數據庫,其中存儲所有的聯繫人,因爲我正在使用的代碼作爲後臺服務在我的應用程序中,我認爲這將是非常低效的。 –
所有你需要存儲的是一個哈希值。我會將其添加到我的答案 – marmor