說明 : APP 端有聯繫人的信息,要導入到手機
(這裏只是抽取了項目中小部分的代碼,如果有這方面的需求,直接拷貝即可)
1. 獲取某個分組下的所有聯繫人信息(模板,可以不做修改直接使用)
拷貝之後,報紅部分是一個聯繫人的Bean,修改成自己的...
public List<AppAddressBook> getAllContactsByGroupId(long groupId) {
String[] RAW_PROJECTION = new String[]{ContactsContract.Data.RAW_CONTACT_ID,};
String RAW_CONTACTS_WHERE = ContactsContract.CommonDataKinds.GroupMembership.GROUP_ROW_ID
+ "=?"
+ " and "
+ ContactsContract.Data.MIMETYPE
+ "="
+ "'"
+ ContactsContract.CommonDataKinds.GroupMembership.CONTENT_ITEM_TYPE
+ "'";
// 通過分組的id 查詢得到RAW_CONTACT_ID
Cursor cursor = MainActivity.this.getContentResolver().query(
ContactsContract.Data.CONTENT_URI, RAW_PROJECTION,
RAW_CONTACTS_WHERE, new String[]{groupId + ""}, "data1 asc");
List<AppAddressBook> contactList = new ArrayList<AppAddressBook>();
while (cursor.moveToNext()) {
// RAW_CONTACT_ID
int col = cursor.getColumnIndex("raw_contact_id");
int raw_contact_id = cursor.getInt(col);
mAppAddressBook = new AppAddressBook();
mAppAddressBook.setUserId(raw_contact_id);
Uri dataUri = Uri.parse("content://com.android.contacts/data");
Cursor dataCursor = MainActivity.this.getContentResolver().query(dataUri,
null, "raw_contact_id=?",
new String[]{raw_contact_id + ""}, null);
while (dataCursor.moveToNext()) {
String data1 = dataCursor.getString(dataCursor
.getColumnIndex("data1"));
String mime = dataCursor.getString(dataCursor
.getColumnIndex("mimetype"));
if ("vnd.android.cursor.item/phone_v2".equals(mime)) {
mAppAddressBook.setPhone1(data1); // 設置電話號碼,就是手機號碼
} else if ("vnd.android.cursor.item/name".equals(mime)) {
mAppAddressBook.setUserName(data1); // 設置姓名
}
}
dataCursor.close();
contactList.add(mAppAddressBook);
mAppAddressBook = null;
}
cursor.close();
return contactList;
}
2. 根據姓名刪除聯繫人 (模板,可以不做修改直接使用)
有時候根據姓名刪除聯繫人並不合適,所以可以選擇根據 ID 來刪除聯繫人
做法 : 可以在方法裏面增加一個參數 :
deleteLocalContact(Context context,String name, int currentId)
在這裏: long id = cursor.getLong(cursor.getColumnIndex(ContactsContract.Data.RAW_CONTACT_ID)) ;下面添加一個判斷
if (currentId == id ) {
ops.add(ContentProviderOperation.newDelete(
ContentUris.withAppendedId(ContactsContract.RawContacts.CONTENT_URI, Id)).build());
try {
getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops) ;
} catch (Exception e) {
}
(這個部分可以直接拷貝,都是原生API) 如果你想單純根據姓名刪除聯繫人,直接拷貝這部分就成
private void deleteLocalContact(Context context, String name) {
Cursor cursor = getContentResolver().query(ContactsContract.Data.CONTENT_URI,
new String[]{ContactsContract.Data.RAW_CONTACT_ID},
ContactsContract.Contacts.DISPLAY_NAME + "=?", new String[]{name}, null);
ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>();
if (cursor.moveToFirst()) {
do {
long Id = cursor.getLong(cursor.getColumnIndex(ContactsContract.Data.RAW_CONTACT_ID));
ops.add(ContentProviderOperation.newDelete(
ContentUris.withAppendedId(ContactsContract.RawContacts.CONTENT_URI, Id)).build());
try {
getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops);
} catch (Exception e) {
}
} while (cursor.moveToNext());
cursor.close();
}
}