簡單的保存手機號到通訊錄並刪除

由於項目需要,做了一個簡單的通訊錄相關需求:保存聯繫人和刪除功能

準備工作:添加權限

<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. 使用添加的聯繫人的iddata表裏面添加數據
    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. 此方法對於部分手機可能會閃退(目前發現魅族的一款手機)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章