Android 联系人操作:插入/搜索/删除






4.67/5 (3投票s)
本文档将帮助您在 Android 设备联系人中插入、搜索和删除条目。
引言
本文档将帮助您在 Android 设备联系人中插入、搜索和删除条目。
使用代码
使用本文提供的联系人操作类,您可以轻松地对联系人列表执行插入、搜索和删除等操作。 在演示项目中,主活动展示了如何使用带有参数的联系人操作类。
代码片段展示了插入、搜索和删除函数。
向联系人插入条目
public static void Insert2Contacts(Context ctx, String nameSurname,
String telephone) {
if (!isTheNumberExistsinContacts(ctx, telephone)) {
ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>();
int rawContactInsertIndex = ops.size();
ops.add(ContentProviderOperation.newInsert(RawContacts.CONTENT_URI)
.withValue(RawContacts.ACCOUNT_TYPE, null)
.withValue(RawContacts.ACCOUNT_NAME, null).build());
ops.add(ContentProviderOperation
.newInsert(ContactsContract.Data.CONTENT_URI)
.withValueBackReference(
ContactsContract.Data.RAW_CONTACT_ID,
rawContactInsertIndex)
.withValue(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE)
.withValue(Phone.NUMBER, telephone).build());
ops.add(ContentProviderOperation
.newInsert(Data.CONTENT_URI)
.withValueBackReference(Data.RAW_CONTACT_ID,
rawContactInsertIndex)
.withValue(Data.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE)
.withValue(StructuredName.DISPLAY_NAME, nameSurname)
.build());
try {
ContentProviderResult[] res = ctx.getContentResolver()
.applyBatch(ContactsContract.AUTHORITY, ops);
} catch (Exception e) {
Log.d(TAG, e.getMessage());
}
}
}
在联系人中搜索条目
public static boolean isTheNumberExistsinContacts(Context ctx,
String phoneNumber) {
Cursor cur = null;
ContentResolver cr = null;
try {
cr = ctx.getContentResolver();
} catch (Exception ex) {
Log.d(TAG, ex.getMessage());
}
try {
cur = cr.query(ContactsContract.Contacts.CONTENT_URI, null, null,
null, null);
} catch (Exception ex) {
Log.i(TAG, ex.getMessage());
}
try {
if (cur.getCount() > 0) {
while (cur.moveToNext()) {
String id = cur.getString(cur
.getColumnIndex(ContactsContract.Contacts._ID));
String name = cur
.getString(cur
.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
// Log.i("Names", name);
if (Integer
.parseInt(cur.getString(cur
.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))) > 0) {
// Query phone here. Covered next
Cursor phones = ctx
.getContentResolver()
.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
null,
ContactsContract.CommonDataKinds.Phone.CONTACT_ID
+ " = " + id, null, null);
while (phones.moveToNext()) {
String phoneNumberX = phones
.getString(phones
.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
// Log.i("Number", phoneNumber);
phoneNumberX = phoneNumberX.replace(" ", "");
phoneNumberX = phoneNumberX.replace("(", "");
phoneNumberX = phoneNumberX.replace(")", "");
if (phoneNumberX.contains(phoneNumber)) {
phones.close();
return true;
}
}
phones.close();
}
}
}
} catch (Exception ex) {
Log.i(TAG, ex.getMessage());
}
return false;
}
从联系人中删除条目
public static boolean deleteContact(Context ctx,String phoneNumber) {
Uri contactUri = Uri.withAppendedPath(PhoneLookup.CONTENT_FILTER_URI,
Uri.encode(phoneNumber));
Cursor cur = ctx.getContentResolver().query(contactUri, null, null,
null, null);
try {
if (cur.moveToFirst()) {
do {
String lookupKey =
cur.getString(cur.getColumnIndex(ContactsContract.Contacts.LOOKUP_KEY));
Uri uri = Uri.withAppendedPath(
ContactsContract.Contacts.CONTENT_LOOKUP_URI,
lookupKey);
ctx.getContentResolver().delete(uri, null, null);
} while (cur.moveToNext());
}
} catch (Exception e) {
System.out.println(e.getStackTrace());
}
return false;
}
}
使用联系人操作类中的函数
ContactOperations.Insert2Contacts(getApplicationContext(),"Yildirim Kocdag", "05321000000");
if (ContactOperations.isTheNumberExistsinContacts(getApplicationContext(), "05321000000")) {
Log.i(ContactOperations.TAG, "Exists");
} else {
Log.i(ContactOperations.TAG, "Not Exists");
}
ContactOperations.deleteContact(getApplicationContext(), "05321000000");
if (ContactOperations.isTheNumberExistsinContacts(getApplicationContext(), "05321000000")) {
Log.i(ContactOperations.TAG, "Exists");
} else {
Log.i(ContactOperations.TAG, "Not Exists");
}
请勿忘记在 AndroidManifest 中使用适当的权限
读取联系人和写入联系人的权限应位于 AndroidManifest.xml 中。
<uses-permission android:name="android.permission.WRITE_CONTACTS"/>
<uses-permission android:name="android.permission.READ_CONTACTS"/>