Android基础开发-通讯录的添加和查询

案例:往手机通讯录添加信息,输入姓名和手机号。

保存的手机的表:一共有两个,一个是主表,提供一个联系人id,另外是辅表,提供id对应的手机号和姓名。

普通操作:一个表一个表的添加

代码如下:

public void addContact(View view) {
//        addContacts(getContentResolver(),new Contact("pansd","17864195555"));
        Contact contact = new Contact("hello", "17864195555");
        ContentResolver contentResolver = getContentResolver();
        ContentValues values = new ContentValues();
//        values.put("hello",contact.getName());
//        values.put("phone",contact.getPhone());
        //返回的是插入的id【插入主表】
        Uri uri = contentResolver.insert(ContactsContract.RawContacts.CONTENT_URI, values);
        long rawContactId = ContentUris.parseId(uri);

        //插入关联表

        ContentValues nameValue = new ContentValues();
        //关联联系人编号
        nameValue.put(ContactsContract.Contacts.Data.RAW_CONTACT_ID,rawContactId);
        //关联姓名的数据类型
        nameValue.put(ContactsContract.Contacts.Data.MIMETYPE, ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE);
        //关联联系人的姓名
        nameValue.put(ContactsContract.Contacts.Data.DATA2,contact.getName());
        //插入关联表
        contentResolver.insert(ContactsContract.Data.CONTENT_URI,nameValue);


        ContentValues phoneValue = new ContentValues();
        //关联联系人编号
        phoneValue.put(ContactsContract.Contacts.Data.RAW_CONTACT_ID,rawContactId);
        //关联电话号码的数据类型
        phoneValue.put(ContactsContract.Contacts.Data.MIMETYPE, ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE);
        //关联联系人的电话号码[1代表家庭 2代表工作]
        phoneValue.put(ContactsContract.Contacts.Data.DATA1,contact.getPhone());
        phoneValue.put(ContactsContract.Contacts.Data.DATA2, ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE);
        //插入关联表
        contentResolver.insert(ContactsContract.Data.CONTENT_URI,phoneValue);


        ContentValues emailValues = new ContentValues();
        emailValues.put(ContactsContract.Contacts.Data.RAW_CONTACT_ID,rawContactId);
        emailValues.put(ContactsContract.Contacts.Data.MIMETYPE, ContactsContract.CommonDataKinds.Email.CONTENT_ITEM_TYPE);
        emailValues.put(ContactsContract.Contacts.Data.DATA1,"faskdfa@163.com");
        emailValues.put(ContactsContract.Contacts.Data.DATA2, ContactsContract.CommonDataKinds.Email.TYPE_WORK);
        contentResolver.insert(ContactsContract.Data.CONTENT_URI,emailValues);
    }

结果:

事务操作,添加联系人到主表和辅表

 //事务操作【批处理操作】
    public void addContacts2(ContentResolver contentResolver,Contact contact){

        ArrayList<ContentProviderOperation> ops = new ArrayList<>();

        ContentProviderOperation op_main = ContentProviderOperation
                .newInsert(ContactsContract.RawContacts.CONTENT_URI)
                .withValue(ContactsContract.RawContacts.ACCOUNT_NAME, null)
                .build();

        ops.add(op_main);

        // 添加姓名信息
        ops.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI)
                .withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0)
                .withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE)
                .withValue(ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME, contact.getName())
                .build());

        // 添加电话号码信息
        ops.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI)
                .withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0)
                .withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE)
                .withValue(ContactsContract.CommonDataKinds.Phone.NUMBER, contact.getPhone())
                .withValue(ContactsContract.CommonDataKinds.Phone.TYPE, ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE)
                .build());

        try {
            // 执行批量操作
            ContentProviderResult[] results = contentResolver.applyBatch(ContactsContract.AUTHORITY, ops);
        } catch (RemoteException | OperationApplicationException e) {
            e.printStackTrace();
        }

    }

通讯录的查询操作: 

 ContentResolver contentResolver = getContentResolver();
        // 查询联系人数据
        Cursor contactsCursor = contentResolver.query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null);
        if (contactsCursor != null && contactsCursor.getCount() > 0) {
            while (contactsCursor.moveToNext()) {
                String contactId = contactsCursor.getString(contactsCursor.getColumnIndex(ContactsContract.Contacts._ID));
                String displayName = contactsCursor.getString(contactsCursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
                // 查询电话号码
                Cursor phoneCursor = contentResolver.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = ?", new String[]{contactId}, null);
                if (phoneCursor != null && phoneCursor.moveToFirst()) {
                    String phoneNumber = phoneCursor.getString(phoneCursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));

                    // 打印联系人姓名和电话号码
                    System.out.println("Name: " + displayName + ", Phone Number: " + phoneNumber);

                    phoneCursor.close();
                }
            }

            contactsCursor.close();
        }

相关推荐

  1. 基于动态内存设计通讯录

    2024-03-14 00:00:03       18 阅读
  2. 数据结构_基于顺序表通讯录

    2024-03-14 00:00:03       12 阅读
  3. 数据结构_基于链表通讯录

    2024-03-14 00:00:03       17 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-03-14 00:00:03       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-03-14 00:00:03       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-03-14 00:00:03       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-03-14 00:00:03       20 阅读

热门阅读

  1. 蓝桥杯 连号区间数

    2024-03-14 00:00:03       20 阅读
  2. Docker 进阶

    2024-03-14 00:00:03       18 阅读
  3. 用python实现支付宝就推出了“集五福”这个活动

    2024-03-14 00:00:03       18 阅读
  4. 你真的理解ssh吗?5分钟ssh入门到精通

    2024-03-14 00:00:03       17 阅读
  5. 什么是回调地狱

    2024-03-14 00:00:03       18 阅读
  6. 【无标题】

    2024-03-14 00:00:03       19 阅读
  7. 77.组合

    2024-03-14 00:00:03       15 阅读
  8. 安卓kotlin面试题 81-90

    2024-03-14 00:00:03       22 阅读