Ich hatte versucht, ein Android-Programm zu schreiben, die Kontakte über den Server synchronisieren. Ich habe den Synchronisierungsteil erreicht Nun möchte ich den Diff-Teil beibehalten, so wie nur die Kontakte, die seit dem letzten Server-Push aktualisiert wurden, beim nächsten Server-Aufruf gedrängt werden. Ich verwende den ContactsContract.Contacts.CONTACT_LAST_UPDATED_TIMESTAMP, um den letzten aktualisierten Zeitstempel der Kontakte im Auge zu behalten. Es funktioniert auch korrekt, da es mir sagt, wenn der Kontakt aktualisiert wurde. Aber es gibt ein Problem, wenn ich irgendeinen Kontakt anrufe, wird CONTACT_LAST_UPDATED_TIMESTAMP auch aktualisiert, als ob der Kontakt jetzt geändert worden wäre. Ich möchte nicht, dass das passiert. Ich möchte die genau letzte aktualisierte Zeit der Kontakte nur oder auf andere Weise, um die obige Situation zu nähern. Vorschläge sind willkommen. Hier ist mein CodeLetzte Aktualisierung der Zeit der Kontakte in Android programmgesteuert
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();
}
hier preActivityAt ist eine Variable, die von gestern aktualisierten Zeitstempel Vortages dh Kontakte hat bis heute an den Server geschoben bekommen sollte
für das ich eine neue Datenbank in meinem Android zu halten hatte, die alle Kontakte speichert und da ich bin mit dem Code als Hintergrunddienst in meiner App denke ich, das wäre ziemlich ineffizient. –
Alles, was Sie zum Speichern benötigen, ist ein Hashwert. Ich werde es meiner Antwort hinzufügen – marmor