文章出處
文章列表
首先,我們需要知道的兩個Uri:
1、Uri uri = Uri.parse("content://com.android.contacts/raw_contacts");//查到data表中raw_contact_id
2、Uri uri1 = Uri.parse("content://com.android.contacts/data");
想取數據庫里面的信息,就必須要知道表的結構我們看一下view_data表:
我們只需要關心下面三列數據:
從表中我們可以看出,Google將聯系人信息放在了一列中,也就是data1列,根據raw_contact_id來區分是否為同一個人的信息,根據mimetype區分聯系人信息中的name、phone、email,所以首先我們要獲得的是raw_contact_id,但是view_data表中的raw_contact_id是重復的。
下面我們再來看一張表raw_contacts:
從這張表中,我們可以獲得聯系人的raw_contact_id,也就可以獲得聯系人的個數,然后通過raw_contact_id獲取每個聯系人。
表的結構了解了,下面我們來看代碼:
1 public void readContacts(){ 2 String name = null; 3 String phone= null; 4 String eMail= null; 5 Uri uri = Uri.parse("content://com.android.contacts/raw_contacts"); 6 Uri uri1 = Uri.parse("content://com.android.contacts/data"); 7 Cursor cursor = getContentResolver().query(uri,new String[]{"contact_id"},null,null,null); 8 while (cursor.moveToNext()){ 9 String contacts_id = cursor.getString(0); 10 //System.out.println("contact_id :"+contacts_id); 11 12 if (contacts_id!=null){ 13 /** 14 * projection 第二個參數,要查詢的列,為null則是查詢所有的列 15 * selection 第三個參數,根據什么條件查詢 16 * selectionArgs 第四個參數,根據什么查的參數 17 * 18 */ 19 Cursor cursor1 = getContentResolver().query(uri1,new String[]{"data1","mimetype"},"raw_contact_id=?",new String[]{contacts_id},null); 20 while (cursor1.moveToNext()){ 21 String data1 = cursor1.getString(0); 22 String mimetype = cursor1.getString(1); 23 //System.out.println("data1:"+data1+"--"+"mimetype:"+mimetype); 24 if (mimetype.equals("vnd.android.cursor.item/name")){ 25 name = data1; 26 }else if (mimetype.equals("vnd.android.cursor.item/phone_v2")){ 27 phone = data1; 28 }else if (mimetype.equals("vnd.android.cursor.item/email_v2")){ 29 eMail = data1; 30 } 31 32 } 33 System.out.println("name:"+name+"- phone:"+phone+" -email:"+eMail); 34 } 35 } 36 }
記得加權限:
<uses-permission android:name="android.permission.READ_CONTACTS"/>
從代碼中,我們可以看的很清楚,先獲取raw_contact_id,然后通過他,獲取data1和mimetype,然后通過mimetype知道data1中的數據是name、phone或者email。
ps:其實解析data表就是解析view_data
下面是插入聯系人:
看代碼:
public void insertContacts(){ Uri uri = Uri.parse("content://com.android.contacts/raw_contacts"); Uri uri1 = Uri.parse("content://com.android.contacts/data"); Cursor cursor = getContentResolver().query(uri,null,null,null,null); int count = cursor.getCount(); int count_id = count+1; ContentValues values = new ContentValues(); values.put("contact_id",count_id); getContentResolver().insert(uri,values); ContentValues contactValue = new ContentValues(); contactValue.put("data1","張三"); contactValue.put("raw_contact_id",count_id); contactValue.put("mimetype","vnd.android.cursor.item/name"); getContentResolver().insert(uri1,contactValue); contactValue.clear();//插完之后記得clear contactValue.put("data1","133333333"); contactValue.put("raw_contact_id",count_id); contactValue.put("mimetype","vnd.android.cursor.item/phone_v2"); getContentResolver().insert(uri1,contactValue); contactValue.clear(); contactValue.put("data1","478569@qq.com"); contactValue.put("raw_contact_id",count_id); contactValue.put("mimetype","vnd.android.cursor.item/email_v2"); getContentResolver().insert(uri1,contactValue); contactValue.clear(); }
基本思路,先從raw_contact表中獲取當前聯系人的個數,然后在加上1之后插入聯系人,
文章列表
全站熱搜