由於項目需要,做了一個簡單的通訊錄相關需求:保存聯繫人和刪除功能
準備工作:添加權限
<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. 此方法對於部分手機可能會閃退(目前發現魅族的一款手機)