读写联系人需要用到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 }