由于项目需要,做了一个简单的通讯录相关需求:保存联系人和删除功能
准备工作:添加权限
<uses-permission android:name="android.permission.READ_CONTACTS"/> <uses-permission android:name="android.permission.WRITE_CONTACTS"/>
1. 从服务端拿到数据(name,number);name = appName + number
2. 保存手机号到通讯录
3.删除之前保存的手机号(根据appName去删除)
上代码:
private int lastId; private int newId; private void savePhone(int i) { // 1.向raw_contact表里面添加联系人的id ContentResolver resolver = getContentResolver(); // 获取raw_contact表对应的uri Uri uri = Uri.parse("content://com.android.contacts/raw_contacts"); // 必须知道最后一条联系人的id是多少 Cursor cursor = resolver.query(uri, new String[]{"_id"}, null, null, null); if (cursor.getCount() == 0) {//当通讯录没有联系人的时候要判断 否则可能会闪退(不知道有没有用) newId = 1; } else { cursor.moveToLast(); lastId = cursor.getInt(0); newId = lastId + 1; } ContentValues values = new ContentValues(); values.put("contact_id", newId); resolver.insert(uri, values); // 2. 使用添加的联系人的id向data表里面添加数据 Uri dataUri = Uri.parse("content://com.android.contacts/data"); // 电话数据 ContentValues phoneValues = new ContentValues(); phoneValues.put("data1", saveList.get(i).getPhone()); phoneValues.put("mimetype", "vnd.android.cursor.item/phone_v2"); phoneValues.put("raw_contact_id", newId); resolver.insert(dataUri, phoneValues); // 姓名数据 ContentValues nameValues = new ContentValues(); nameValues.put("data1", "appName_" + saveList.get(i).getPhone());//手机号码集合获得的手机号 nameValues.put("mimetype", "vnd.android.cursor.item/name"); nameValues.put("raw_contact_id", newId); resolver.insert(dataUri, nameValues); } //删除nameList = new ArrayList<String>();//填充姓名的集合 saveName();//1.保存姓名 for (int i = 0; i < nameList.size(); i++) { if (nameList.get(i).contains("微商导航")) { Delete(nameList.get(i));//2.根据姓名去删除联系人 } }private void saveName() { if (nameList != null) { nameList.clear(); } //使用ContentResolver查找联系人数据 Cursor cursor = this.getContentResolver().query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null); //遍历查询结果,找到所需号码 while (cursor.moveToNext()) { //获取联系人的名字 String name = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME)); nameList.add(name); } cursor.close(); }private void Delete(String name) { //根据姓名求id Uri uri = Uri.parse("content://com.android.contacts/raw_contacts"); ContentResolver resolver = this.getContentResolver(); Cursor cursor = resolver.query(uri, new String[]{ContactsContract.RawContacts.Data._ID}, "display_name=?", new String[]{name}, null); if (cursor.moveToFirst()) { int id = cursor.getInt(0); //根据id删除data中的相应数据 resolver.delete(uri, "display_name=?", new String[]{name}); uri = Uri.parse("content://com.android.contacts/data"); resolver.delete(uri, "raw_contact_id=?", new String[]{id + ""}); } cursor.close(); }
//1. 删除可能比较耗时,因为是一个一个的进行删除
//2. 此方法对于部分手机可能会闪退(目前发现魅族的一款手机)