contentprovider运用-对联系人进行查询和增加

项目说明:

基于recycleview,读取数据库 对联系人进行增删改

本次更新主要是完善联系人界面,从本机数据库中获取联系人并显示出来,以及增加添加联系人的button将添加的联系人保存到系统库中。

源码地址:https://gitee.com/zoey_huang/wechat.git

运行截图:
读取联系人

手机联系人数据库contacts2.db位置:

手机系统目录data/data下的包com.android.providers.contacts

模拟机可以在Device File Explorer里面看到

数据库contacts2.db里包含raw_contacts联系人id存放在字段contact_id。表data存放联系人的具体信息;表contacts存放联系人的其他信息。

URI

android.provider. ContactsContract的 内部类Contacts 提供了访问手机联系人数据库的 Uri— ContactsContract.Contacts.CONTENT_URI 。通过这个 Uri ,可以访问手机所有人的相关信息。
 

权限

系统数据库的读写操作,需要授权。

    <uses-permission android:name="android.permission.READ_CONTACTS" />
    <uses-permission android:name="android.permission.WRITE_CONTACTS" />

需要动态申请:

// 给予权限
        int hasWriteContactsPermisson = ContextCompat.checkSelfPermission(view.getContext(), Manifest.permission.READ_CONTACTS);
        if(hasWriteContactsPermisson != PackageManager.PERMISSION_GRANTED) {
            requestPermissions(new String[]{Manifest.permission.WRITE_CONTACTS}, 1);
        }

 

布局:

加上悬浮按钮。

展开后:

悬浮按钮操作

//悬浮按钮点击操作
        FloatingActionButton fab = view.findViewById(R.id.fab);
        fab.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(final View view) {
                final View resultDialog = getActivity().getLayoutInflater().inflate(R.layout.top_btn_add, null);  // 设置成final,否则String name = ((EditText) resultDialog.findViewById(R.id.name)).getText().toString();报EditText空指针错误
                // 使用对话框来显示查询结果
                AlertDialog show = new AlertDialog.Builder(view.getContext())
                        .setView(resultDialog)
                        .setTitle("Add your contact")
                        .setPositiveButton("确认", new DialogInterface.OnClickListener() {
                            @Override
                            public void onClick(DialogInterface dialog, int which) {
                                // 获取程序界面中的三个文本框的内容
                                String name = ((EditText) resultDialog.findViewById(R.id.name)).getText().toString();
                                String phone = ((EditText) resultDialog.findViewById(R.id.phone)).getText().toString();
                                String email = ((EditText) resultDialog.findViewById(R.id.email)).getText().toString();
                                // 创建一个空的ContentValues
                                ContentValues values = new ContentValues();
                                // 向RawContacts.CONTENT_URI执行一个空值插入
                                // 目的是获取系统返回的rawContactId
                                Uri rawContactUri = getActivity().getContentResolver().insert(ContactsContract.RawContacts.CONTENT_URI, values);
                                long rawContactId = ContentUris.parseId(rawContactUri);
                                values.clear();
                                values.put(ContactsContract.RawContacts.Data.RAW_CONTACT_ID, rawContactId);
                                // 设置内容类型
                                values.put(ContactsContract.RawContacts.Data.MIMETYPE, ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE);
                                // 设置联系人名字
                                values.put(ContactsContract.CommonDataKinds.StructuredName.GIVEN_NAME, name);
                                // 向联系人URI添加联系人名字
                                getActivity().getContentResolver().insert(ContactsContract.Data.CONTENT_URI, values);
                                values.clear();
                                values.put(ContactsContract.RawContacts.Data.RAW_CONTACT_ID, rawContactId);
                                values.put(ContactsContract.RawContacts.Data.MIMETYPE, ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE);
                                // 设置联系人的电话号码
                                values.put(ContactsContract.CommonDataKinds.Phone.NUMBER, phone);
                                // 设置电话类型
                                values.put(ContactsContract.CommonDataKinds.Phone.TYPE, ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE);
                                // 向联系人电话号码URI添加电话号码
                                getActivity().getContentResolver().insert(ContactsContract.Data.CONTENT_URI, values);
                                values.clear();
                                values.put(ContactsContract.RawContacts.Data.RAW_CONTACT_ID, rawContactId);
                                values.put(ContactsContract.RawContacts.Data.MIMETYPE, ContactsContract.CommonDataKinds.Email.CONTENT_ITEM_TYPE);
                                // 设置联系人的E-mail地址
                                values.put(ContactsContract.CommonDataKinds.Email.DATA, email);
                                // 设置该电子邮件的类型
                                values.put(ContactsContract.CommonDataKinds.Email.TYPE, ContactsContract.CommonDataKinds.Email.TYPE_WORK);
                                // 向联系人E-mail URI添加E-mail数据
                                getActivity().getContentResolver().insert(ContactsContract.Data.CONTENT_URI, values);

                                Toast.makeText(view.getContext(), "联系人添加成功", Toast.LENGTH_SHORT).show();
                                PersonData personData = new PersonData();
                                personData.setName(name);
                                personData.setPhoneNumber(phone);
                                personData.setEmailAddress(email);
                                mDataList.add(personData);
                                mList.add("");
                                adapter.notifyDataSetChanged();
                            }
                        })
                        .setNegativeButton("取消", null).show();
            }
        });

获取联系人数据:

private void viewShow() {       // 将系统联系人中的数据
        Cursor cursor = getActivity().getContentResolver().query(ContactsContract.Contacts.CONTENT_URI,// 使用ContentResolver查找联系人数据
                null, null,
                null, null);
        while (cursor.moveToNext()) {
            String contactId = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID));// 获取联系人ID
            String name = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));// 获取联系人的名字
            Cursor phones = getActivity().getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,// 使用ContentResolver查找联系人的电话号码
                    null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID  + " = " + contactId,
                    null, null);
            String phoneNumber = "";
            while (phones.moveToNext()) {// 遍历查询结果,获取该联系人的多个电话号码
                phoneNumber = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));// 获取查询结果中电话号码列中数据
            }
            phones.close();
            Cursor emails = getActivity().getContentResolver().query(ContactsContract.CommonDataKinds.Email.CONTENT_URI,// 使用ContentResolver查找联系人的E-mail地址
                    null, ContactsContract.CommonDataKinds.Email.CONTACT_ID + " = " + contactId,
                    null, null);
            String emailAddress = "";
            while (emails.moveToNext()) {// 遍历查询结果,获取该联系人的多个E-mail地址
                emailAddress = emails.getString(emails.getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA));// 获取查询结果中E-mail地址列中数据
            }
            emails.close();
            mList.add(name + "| " + phoneNumber + "| " + emailAddress);
        }
        cursor.close();
        initData();
    }

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值