raw contact子表資料查詢

來源:互聯網
上載者:User

RAW_CONTACT子表的查詢很有意思。

RAW_CONTACT子表有很多。主要的有:

android.provider.ContactsContract.CommonDataKinds.StructuredName;

android.provider.ContactsContract.CommonDataKinds.Phone;

android.provider.ContactsContract.CommonDataKinds.Email;

android.provider.ContactsContract.CommonDataKinds.Organization;

我們可以通過以下形式來進行查詢

        // Set our expandable list adapter

        String[] projection = new String[] {

                Phone._ID,

                Phone.DISPLAY_NAME,

                Phone.NUMBER,

                Phone.RAW_CONTACT_ID,

                };

        

        Cursor contactData = managedQuery(

                Phone.CONTENT_URI,

                null, //這裡是查詢所有的列。可以用projection代替來進行指定查詢

                null, 

                null, 

                null);

我用下面的語句列印出查詢到所有列名

(注意用Email查詢出的列一樣,說明不同子表查的列數量一樣,只是在DATA1到DATA15的意義不同)

        int colCount=contactData.getColumnCount();

        for(int i=0;i<colCount;i++)

            Log.i(TAG,i+"i:"+contactData.getColumnName(i));

但列印出來的列比我想象的多很多。我想Phone.CONTENT_URI是對應資料庫的“視圖”概念

查詢所得一共有55列

一、子表本身資料,ContactsContract.Data中聲明的25個列:

變數名                            列名                                備忘

 _ID                            _id

 MIMETYPE                        mimetype

 RAW_CONTACT_ID                    raw_contact_id

 IS_PRIMARY                        is_primary

 IS_SUPER_PRIMARY                is_super_primary

 DATA_VERSION                    data_version

 DATA1~DATA15                    data1~data15

 SYNC1~SYNC4                    data_sync1~data_sync4

 

二、和ContactsContract.StatusUpdates串連,所得的6項資料

變數名                            列名                                備忘

PRESENCE                        mode            PRESENCE_STATUS變數也是“mode”,但按照Data的文檔是PRESENCE

STATUS                            status            PRESENCE_CUSTOM_STATUS變數也是“mode”,但按照Data的文檔應該是STATUS

STATUS_TIMESTAMP                status_ts

STATUS_RES_PACKAGE                status_res_package

STATUS_LABEL                    status_label                    

STATUS_ICON                        status_icon

注意1:其實PRESENCE_STATUS和PRESENCE_CUSTOM_STATUS並沒有在StatusUpdates申明的列當中。當然也就不可能被串連進來。

注意2:StatusUpdates共有11項資料,但還有5項資料沒被串連進來。

他們是DATA_ID,PROTOCOL,CUSTOM_PROTOCOL,IM_HANDLE, IM_ACCOUNT。


三、串連RawContacts所得的11項目資料。

變數名                            列名                                備忘

 CONTACT_ID                        contact_id

 TIMES_CONTACTED                times_contacted

 LAST_TIME_CONTACTED            last_time_contacted

 STARRED                        starred

 CUSTOM_RINGTONE                custom_ringtone

 SEND_TO_VOICEMAIL                send_to_voicemail

 ACCOUNT_NAME                    account_name

 ACCOUNT_TYPE                    account_type

 SOURCE_ID                        sourceid

 VERSION                        version

 DIRTY                            dirty

注意1:雖然RawContacts共擁有18項資料,但這裡只包含了11項目。還有7項沒被包含進來。

他們分別是_ID,AGGREGATION_MODE,DELETED,SYNC1~SYNC4

注意2:RawContactsColumns一共定義的三項目資料,但是只有一項CONTACT_ID被包含進來。

AGGREGATION_MODE和DELETED沒有被包含進來

按照ContactsContract.Data中的文檔,只有CONTACT_ID,AGGREGATION_MODE,DELETED三項會被包含來的啊。

但實際並非如此。WHY?


四、串連Contacts所得的9項目資料。

變數名                            列名                                備忘

 LOOKUP_KEY                        lookup

 PHOTO_ID                        photo_id

 IN_VISIBLE_GROUP                in_visible_group

 CONTACT_PRESENCE                contact_presence

 ONTACT_STATUS                    contact_status

 CONTACT_STATUS_TIMESTAMP        contact_status_ts

 CONTACT_STATUS_RES_PACKAGE        contact_status_res_package

 CONTACT_STATUS_LABEL            contact_status_label

 CONTACT_STATUS_ICON                contact_status_icon

注意1:雖然RawContacts共擁有17項資料,但這裡只包含了9項目。還有8項沒被包含進來。

他們分別是: _ID,NAME_RAW_CONTACT_ID,DISPLAY_NAME_PRIMARY,TIMES_CONTACTED,

LAST_TIME_CONTACTED,STARRED,CUSTOM_RINGTONE,SEND_TO_VOICEMAIL

注意2:在RawContacts和Contacts中都有一個名叫TIMES_CONTACTED的變數名,且他們的列名都為“times_contacted”。

參照TIMES_CONTACTED在兩個類的中的定義,

Contacts中TIMES_CONTACTED值為Contacts組中所有RawContacts的TIMES_CONTACTED值的最大值。

所以查詢所得名叫times_contacted的列應該是對於RawContacts的TIMES_CONTACTED。

LAST_TIME_CONTACTED同理。

注意3:STARRED參照定義也可知查詢所得名叫STARRED的列應該是對於RawContacts的STARRED。

注意4:對於CUSTOM_RINGTONE和SEND_TO_VOICEMAIL, 在RawContacts和Contacts的列中都有對他們的申明,且它們的定義也相同。

參照它們的定義文檔來看也不是很清楚。

但我們這裡主要是針對RawContacts的查詢,我想他們應該是來自於RawContacts,而不是Contacts。

注意5:對於TIMES_CONTACTED,LAST_TIME_CONTACTED,STARRED,CUSTOM_RINGTONE,SEND_TO_VOICEMAIL

然參照ContactsContract.Data文檔他們是被Contacts串連進來,

但通過以上分析,他們沒有Contact串連進來。而是通過RawContacts串連進來。


五、Data.GroupMembership的一項資料。

    變數名                            列名                                備忘

    GROUP_SOURCE_ID                  group_sourceid

 這個資料應該是通過串連Data.GroupMembership所得的。但是文檔中並沒說明

 六,未確定來來源資料2項

     列名                                備忘

    display_name                        

    res_package

注意1:display_name可能來自ContactsColumns的DISPLAY_NAME,及來自於Conact.

但關於Conact的DISPLAY_NAME來自於資料庫的哪裡還是puzzle.可能來自於DISPLAY_NAME_PRIMARY。

為什麼不能直接查詢Contacts的DISPLAY_NAME_PRIMARY?也是個puzzle.

注意2:res_package來自哪裡?沒任何線索。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.