1.获取联系人
调用系统提供的contentProvider
raw_contacts 表
contact_id 存放联系人的id
data 表
这个表是用来存储所有的联系人的详细信息的
一个联系人的信息可能分为多条数据
其中比较重要的地段是数据类型,联系人id,还有数据内容。
其中有一个字段mime_type是数据的类型(电话,邮箱,名字
等等)
mimetypes 表
就是联系人所有的数据类型选项
看源码可以看出contentProvider有两个Uri,两个都是可以用
的,但是在4.0之后。只能使用分号后面的Uri
该路径是向低版本兼容的
如果要获取联系人的数据,该怎么做?
1.获取所有的联系人的id
2.根据id查询到这个联系人的所有的数据消息
读取联系人的权限
//在这里进行联系人的获取 ContentResolver cr = getContentResolver(); //1.获取所有人的联系人的id Cursor cursorID = cr.query(Uri.parse("content://com.android.contacts/raw_contacts"), new String[]{"contact_id"}, null, null, null); if (cursorID.getCount() == 0) { Toast.makeText(MainActivity.this, "没有联系人", Toast.LENGTH_SHORT).show(); return; } //2.根据ID获取到每一个联系人的所有信息 while (cursorID.moveToNext()) { //拿到id的字符串 String contactid = cursorID.getString(cursorID.getColumnIndex("contact_id")); //根据ID去data数据库里查询联系人的所有信息 Cursor contactData = cr.query(Uri.parse("content://com.android.contacts/data"), new String[]{"data1", "mimetype"}, "raw_contact_id=?", new String[]{contactid}, null); //遍历获取联系人的信息 while (contactData.moveToNext()) { //拿到数据内容 String data1 = contactData.getString(contactData.getColumnIndex("data1")); //拿到数据类型 String mimeType = contactData.getString(contactData.getColumnIndex("mimetype")); if ("vnd.android.cursor.item/email_v2".equals(mimeType)) { Log.i("邮箱", data1); } else if ("vnd.android.cursor.item/phone_v2".equals(mimeType)) { Log.i("手机;", data1); } else if ("vnd.android.cursor,item/name".equals(mimeType)) { Log.i("名字", data1); } } //关闭游标对象,释放内存 contactData.close(); } //关闭游标对象,释放内存 cursorID.close(); //3.添加权限,允许读取ContentProvider //}
2.向系统插入联系人
1、先去 raw_contacts 表中添加 id;
2、然后借助 id 去 data 表中添加各种信息。
写入联系人的权限
ContentResolver cr = getContentResolver(); //先查询 raw_contacts 表,获取最新联系人的主键,然后主键+1,就是要插入的联系人的 id Cursor cursorId = cr.query(Uri.parse("content://com.android.contacts/raw_contacts"), new String[]{"_id"},null,null,null); //默认联系人 id 就是 1 int contact_id = 1; if(cursorId.moveToLast()){ //拿到主键 int _id = cursorId.getInt(cursorId.getColumnIndex("_id")); //主键+1,就是要插入的联系人 contact_id = ++_id; } //把 contact_id 添加到 raw_contacts 表中 ContentValues values = new ContentValues(); values.put("contact_id",contact_id); cr.insert(Uri.parse("content://com.android.contacts/raw_contacts"),values); //清空 ContentValues 插入姓名 values.clear(); values.put("data1", "盗跖"); values.put("mimetype", "vnd.android.cursor.item/name"); values.put("raw_contact_id", contact_id); cr.insert(Uri.parse("content://com.android.contacts/data"), values); //清空 ContentValues 插入电话 values.clear(); values.put("data1", "888888888"); values.put("mimetype", "vnd.android.cursor.item/phone_v2"); values.put("raw_contact_id", contact_id); cr.insert(Uri.parse("content://com.android.contacts/data"), values); cursorId.close(); Toast.makeText(MainActivity.this,"插入数据成功",Toast.LENGTH_SHORT).show();