有很多與此相關的問題,但沒有一個能夠幫助我獲得解決方案。如何在地址簿中插入/更新/刪除聯繫人
我試圖將設備中的所有聯繫人同步到遠程服務器,並且能夠輕鬆完成,但是當更新/刪除/插入(新聯繫人)等聯繫人發生更改時無法找到解決方案。
嘗試使用ContentObserver
但onChange()
被多次調用。很難找到聯繫人更改數據。
public class ContactService extends Service {
private int mContactCount;
@Override
public IBinder onBind(Intent arg0) {
return null;
}
@Override
public void onCreate() {
super.onCreate();
mContactCount = getContactCount();
Log.d("Contact Service", mContactCount + "");
this.getContentResolver().registerContentObserver(
ContactsContract.Contacts.CONTENT_URI, true, mObserver);
}
private int getContactCount() {
Cursor cursor = null;
try {
cursor = getContentResolver().query(
ContactsContract.Contacts.CONTENT_URI, null, null, null,
null);
if (cursor != null) {
return cursor.getCount();
} else {
return 0;
}
} catch (Exception ignore) {
} finally {
if (cursor != null) {
cursor.close();
}
}
return 0;
}
private ContentObserver mObserver = new ContentObserver(new Handler()) {
@Override
public void onChange(boolean selfChange) {
super.onChange(selfChange);
final int currentCount = getContactCount();
if (currentCount < mContactCount) {
// CONTACT DELETED.
Log.d("Contact Service", currentCount + "");
} else if (currentCount == mContactCount) {
// CONTACT UPDATED.
og.d("Contact Service", currentCount+"");
} else {
// NEW CONTACT.
Log.d("Contact Service", currentCount + "");
}
mContactCount = currentCount;
}
};
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
return START_STICKY;
}
@Override
public void onDestroy() {
super.onDestroy();
getContentResolver().unregisterContentObserver(mObserver);
}
}
但是onChange()
當有更新/插入地址簿時多次調用。
任何人都可以提供給我更好的解決方案嗎?
它將不勝感激。
感謝
得到了這裏的解決方案 - http://stackoverflow.com/a/31970349/1881611 – IshRoid