读写联系人需要用到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 @Override20 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(cursorContactId35 .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(cursor244 .getColumnIndex("data1"));45 String mimetype = cursor2.getString(cursor246 .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 }