Android开发之读写联系人

读写联系人需要用到android的ContentProvider

同时需要读和写联系人的权限

需要使用到联系人数据库中的

* raw_contacts表:
* contact_id:联系人id


* data表:联系人的具体信息,一个信息占一行
* data1:信息的具体内容
* raw_contact_id:联系人id,描述信息属于哪个联系人
* mimetype_id:描述信息是属于什么类型


* mimetypes表:通过mimetype_id到该表查看具体类型

 1 import android.app.Activity;
 2 import android.content.ContentResolver;
 3 import android.content.ContentValues;
 4 import android.database.Cursor;
 5 import android.net.Uri;
 6 import android.os.Bundle;
 7 import android.view.Menu;
 8 import android.view.MenuItem;
 9 import android.view.View;
10 
11 /*
12  * 读写联系人,通过系统提供的ContentProvider实现。需要读和写联系人的权限
13  * 需要使用raw_contacts表、data表、mimetypes表
14  */
15 public class MainActivity extends Activity {
16 
17     private ContactBean contactBean;
18 
19     @Override
20     protected void onCreate(Bundle savedInstanceState) {
21         super.onCreate(savedInstanceState);
22         setContentView(R.layout.activity_main);
23         contactBean = new ContactBean();
24     }
25     //获取手机通讯录中的联系人信息
26     public void click(View v) {
27         ContentResolver cr = getContentResolver();
28         //获取到raw_contacts表中的contact_id字段
29         Cursor cursorContactId = cr.query(
30                 Uri.parse("content://com.android.contacts/raw_contacts"),
31                 new String[] { "contact_id" }, null, null, null);
32         if (cursorContactId != null) {
33             while (cursorContactId.moveToNext()) {
34                 String contact_id = cursorContactId.getString(cursorContactId
35                         .getColumnIndex("contact_id"));
36                 //通过获取到的contact_id,在data表中查询具体的联系人名称,电话,email等信息。
37                 Cursor cursor2 = cr.query(
38                         Uri.parse("content://com.android.contacts/data"),
39                         new String[] { "data1", "mimetype" },
40                         "raw_contact_id=?", new String[] { contact_id }, null);
41                 if (cursor2 != null) {
42                     while (cursor2.moveToNext()) {
43                         String data1 = cursor2.getString(cursor2
44                                 .getColumnIndex("data1"));
45                         String mimetype = cursor2.getString(cursor2
46                                 .getColumnIndex("mimetype"));
47                         //通过mimetypes表中字段比较,获取到联系人的email信息
48                         if ("vnd.android.cursor.item/email_v2".equals(mimetype)) {
49                             contactBean.setEmail(data1);
50                         //通过mimetypes表中字段比较,获取到联系人的name信息
51                         } else if ("vnd.android.cursor.item/name"
52                                 .equals(mimetype)) {
53                             contactBean.setName(data1);
54                         //通过mimetypes表中字段比较,获取到联系人的phone信息
55                         } else if ("vnd.android.cursor.item/phone_v2"
56                                 .equals(mimetype)) {
57                             contactBean.setPhone(data1);
58                         }
59                     }
60                     System.out.println(contactBean.toString());
61                 }
62             }
63         }
64     }
65     //插入数据到手机通讯录
66     public void insertContact(View v){
67         ContentResolver cr = getContentResolver();
68         //通过字段_id在raw_contacts表中查询目前通讯录含有多少条联系人,然后在已有的联系人数目上+1就是要插入联系人的_id.
69         Cursor cursor=cr.query(Uri.parse("content://com.android.contacts/raw_contacts"), new String[]{"_id"}, null, null, null);
70         int num=1;
71         if (cursor.moveToLast()) {
72             int id=cursor.getColumnIndex("_id");
73             num=id+1;
74         }
75         ContentValues values = new ContentValues();
76         values.put("contact_id", num);
77         cr.insert(Uri.parse("content://com.android.contacts/raw_contacts"), values);
78         values.clear();
79         values.put("data1", "二五");
80         values.put("mimetype", "vnd.android.cursor.item/name");
81         values.put("raw_contact_id", num);
82         cr.insert(Uri.parse("content://com.android.contacts/data"), values);
83         values.clear();
84         values.put("data1", "12345678901");
85         values.put("mimetype", "vnd.android.cursor.item/phone_v2");
86         values.put("raw_contact_id", num);
87         cr.insert(Uri.parse("content://com.android.contacts/data"), values);
88         values.clear();
89         values.put("data1", "1234@haha.com");
90         values.put("mimetype", "vnd.android.cursor.item/email_v2");
91         values.put("raw_contact_id", num);
92         cr.insert(Uri.parse("content://com.android.contacts/data"), values);
93     }
94 
95 }
原文地址:https://www.cnblogs.com/liyiran/p/5104504.html