文章出處

首先,我們需要知道的兩個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之后插入聯系人,



 


文章列表




Avast logo

Avast 防毒軟體已檢查此封電子郵件的病毒。
www.avast.com


arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()