我已经实现了一个ContentObserver,使用这种方法,我只能够被通知如果一个联系人发生变化Android如何检测联系人列表已更改?
但我不知道哪个联系人被添加,删除或更新?
!有什么建议么 ?我如何知道哪个特定联系人被修改?
我通过使用以下方法获取所有联系人列表。
public void readContacts() {
System.out.println(" reading contact ");
String phoneNumber = null;
Uri CONTENT_URI = ContactsContract.Contacts.CONTENT_URI;
String _ID = ContactsContract.Contacts._ID;
String DISPLAY_NAME = ContactsContract.Contacts.DISPLAY_NAME;
String HAS_PHONE_NUMBER = ContactsContract.Contacts.HAS_PHONE_NUMBER;
Uri PhoneCONTENT_URI = ContactsContract.CommonDataKinds.Phone.CONTENT_URI;
String Phone_CONTACT_ID = ContactsContract.CommonDataKinds.Phone.CONTACT_ID;
String NUMBER = ContactsContract.CommonDataKinds.Phone.NUMBER;
StringBuffer output = new StringBuffer();
ContentResolver contentResolver = getContentResolver();
Cursor cursor = contentResolver.query(CONTENT_URI, null, null, null,
null);
if (cursor.getCount() > 0) {
while (cursor.moveToNext()) {
String contact_id = cursor
.getString(cursor.getColumnIndex(_ID));
String name = cursor.getString(cursor
.getColumnIndex(DISPLAY_NAME));
// int id =
// Integer.parseInt(cursor.getString(cursor.getColumnIndex(
// HAS_PHONE_NUMBER)));
int hasPhoneNumber = Integer.parseInt(cursor.getString(cursor
.getColumnIndex(HAS_PHONE_NUMBER)));
if (hasPhoneNumber > 0) {
output.append("\n First Name:" + name);
System.out.println(" CONTACT NAME : " + name);
Contact_Name.add(name);
// Query and loop for every phone number of the contact
Cursor phoneCursor = contentResolver.query(
PhoneCONTENT_URI, null, Phone_CONTACT_ID + " = ?",
new String[] { contact_id }, null);
phoneCursor.moveToNext();
phoneNumber = phoneCursor.getString(phoneCursor
.getColumnIndex(NUMBER));
output.append("\n Phone number:" + phoneNumber);
System.out.println(" CONTACT number : " + phoneNumber);
phoneNumber = phoneNumber.replaceAll("\\s", "");
// phoneNumber = phoneNumber.substring(phoneNumber.length()
// - 10);
// System.err.println("Mobile no."+phoneNumber);
Contact_Number.add(phoneNumber);
phoneCursor.close();
}
output.append("\n");
}
}
}
并且我正在观察联系人列表正在通过regestring并使用以下代码进行更改。
this.getContentResolver().registerContentObserver(
ContactsContract.Contacts.CONTENT_URI, true, mObserver);
private ContentObserver mObserver = new ContentObserver(new Handler()) {
@Override
public void onChange(boolean selfChange) {
super.onChange(selfChange);
final int currentCount = getContactCount();
if (currentCount < mContactCount) {
System.out.println(" Deleted contact");
} else if (currentCount == mContactCount) {
System.out.println(" upated contact");
} else {
System.out.println(" inserted contact");
}
mContactCount = currentCount;
}
};
为什么'mObserver'的'registerContentObserver'后的声明? – Manu 2014-09-05 12:41:29
@Manu我已经在我的代码中完美地声明了这一点。这里只有我在registerContentObserver – 2014-09-05 12:43:15