简单的保存手机号到通讯录并删除

由于项目需要,做了一个简单的通讯录相关需求:保存联系人和删除功能

准备工作:添加权限

<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. 此方法对于部分手机可能会闪退(目前发现魅族的一款手机)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值