理清contactsprovider
生活随笔
收集整理的這篇文章主要介紹了
理清contactsprovider
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
初步了解android contact provider
??
??????? android的聯(lián)系人數(shù)據(jù)單獨(dú)拿出來做成ContactsProvider,眾多的table和view整體看下來,使得聯(lián)系人的數(shù)據(jù)錯(cuò)綜復(fù)雜。但是我們?cè)陂_發(fā)的過程并不需要將所有的table都搞清楚。用到最多的是 ContactsContract.Contacts、ContactsContract.RawContacts、ContactsContract.Data這三張表格。
??????? 先預(yù)覽一下,一個(gè)聯(lián)系人數(shù)據(jù)的存儲(chǔ)結(jié)構(gòu):
可以很直觀的看出。一個(gè)聯(lián)系人在contacts2.db中(除了profile.db中的自己外),數(shù)據(jù)基本存放在3張表中,在ContactsContract.Contacts中會(huì)存在一條記錄,在ContactsContract.RawContacts中可能存在多個(gè)記錄,ContactsContract.Data中的數(shù)據(jù)是對(duì)ContactsContract.RawContacts的詳細(xì)描述。
???????
???? ? ? ? ? ? ? ?? ?
?????????????????????????? (圖1)
??????? ContactsContract.Contacts的表格大致如下,_id對(duì)應(yīng)著的就是我們?cè)赾ontacts中看到的一個(gè)聯(lián)系人。有一點(diǎn)需要注意的是,當(dāng)刪除掉一個(gè)聯(lián)系人時(shí),表中的記錄會(huì)刪除,但是_id并不會(huì)減少,而是一直增加,所以有可能看到的_id是1,2,4...這樣的記錄。
???????
??????? ContactsContract.RawContacts的表格結(jié)構(gòu)大致如下,它里面的記錄主要是針對(duì)特定賬戶下的聯(lián)系人數(shù)據(jù)的描述(data表中的數(shù)據(jù))。這邊的contact_id對(duì)應(yīng)的是contacts表中的_id,一個(gè)聯(lián)系人在raw_contacts表格中可能存在一條以上的記錄,這主要是由于caccount_name和account_type不同造成的。
??????? 這邊需要用一個(gè)例子來幫助理解:
假設(shè)我在我的手機(jī)上有三個(gè)賬戶 gaojian@gmail.com、gaojian3301@gmail.com,這兩個(gè)賬戶的“同步聯(lián)系人”都被check上,當(dāng)我添加一個(gè)聯(lián)系人到手機(jī)里時(shí),這個(gè)聯(lián)系人會(huì)同時(shí)被備份到這個(gè)兩個(gè)賬戶中去,所以這兩個(gè)記錄在raw_contacts表格中的contact_id會(huì)一樣。
??????? data表格中記錄的數(shù)據(jù)是對(duì)raw_contacts中數(shù)據(jù)的詳細(xì)描述。這邊的data1存儲(chǔ)的值就是聯(lián)系人在搜索時(shí)會(huì)search的值;data15用來存儲(chǔ)一些比較大的二進(jìn)制對(duì)象,比如說聯(lián)系人的頭像縮略圖。
這一邊需要注意一個(gè)事情:在我們開發(fā)或者測(cè)試的過程中,不要將與MMIETYPE格式不匹配的數(shù)據(jù)存入data中(比如將email的值設(shè)置為1233445),這可能會(huì)造成data數(shù)據(jù)的丟失,更甚者會(huì)導(dǎo)致provider出問題(這個(gè)我猜測(cè)比如在發(fā)送Email的時(shí)候,去選擇contacts,返回值可能會(huì)有問題,沒有驗(yàn)證過)。
??????? 總結(jié)一下,我們可以從contacts中找到我們想要看的聯(lián)系人,在raw_contacts中可以看到的是這個(gè)聯(lián)系人一些數(shù)據(jù)的基本描述,而data提供給我們的是這個(gè)聯(lián)系人所有的具體信息。這三張表格就是在平時(shí)開發(fā)中,打交道最多的表格。當(dāng)然,如果要獲取和修改群組的信息,那么還會(huì)接觸到group這張表格;而篩選的表格對(duì)應(yīng)的是search_index。
??????
????? 放一張android官方api的圖做個(gè)了斷:
?????????????????????????????????????????????
??
??????? android的聯(lián)系人數(shù)據(jù)單獨(dú)拿出來做成ContactsProvider,眾多的table和view整體看下來,使得聯(lián)系人的數(shù)據(jù)錯(cuò)綜復(fù)雜。但是我們?cè)陂_發(fā)的過程并不需要將所有的table都搞清楚。用到最多的是 ContactsContract.Contacts、ContactsContract.RawContacts、ContactsContract.Data這三張表格。
??????? 先預(yù)覽一下,一個(gè)聯(lián)系人數(shù)據(jù)的存儲(chǔ)結(jié)構(gòu):
可以很直觀的看出。一個(gè)聯(lián)系人在contacts2.db中(除了profile.db中的自己外),數(shù)據(jù)基本存放在3張表中,在ContactsContract.Contacts中會(huì)存在一條記錄,在ContactsContract.RawContacts中可能存在多個(gè)記錄,ContactsContract.Data中的數(shù)據(jù)是對(duì)ContactsContract.RawContacts的詳細(xì)描述。
???????
???? ? ? ? ? ? ? ?? ?
?????????????????????????? (圖1)
??????? ContactsContract.Contacts的表格大致如下,_id對(duì)應(yīng)著的就是我們?cè)赾ontacts中看到的一個(gè)聯(lián)系人。有一點(diǎn)需要注意的是,當(dāng)刪除掉一個(gè)聯(lián)系人時(shí),表中的記錄會(huì)刪除,但是_id并不會(huì)減少,而是一直增加,所以有可能看到的_id是1,2,4...這樣的記錄。
| _id | starred | lookup | photo_id |
| 1 | 0 | ?... | <null> |
| 2 | 0 | ?... | <null> |
| 4 | 1 | ?... | 1 |
??????? ContactsContract.RawContacts的表格結(jié)構(gòu)大致如下,它里面的記錄主要是針對(duì)特定賬戶下的聯(lián)系人數(shù)據(jù)的描述(data表中的數(shù)據(jù))。這邊的contact_id對(duì)應(yīng)的是contacts表中的_id,一個(gè)聯(lián)系人在raw_contacts表格中可能存在一條以上的記錄,這主要是由于caccount_name和account_type不同造成的。
??????? 這邊需要用一個(gè)例子來幫助理解:
假設(shè)我在我的手機(jī)上有三個(gè)賬戶 gaojian@gmail.com、gaojian3301@gmail.com,這兩個(gè)賬戶的“同步聯(lián)系人”都被check上,當(dāng)我添加一個(gè)聯(lián)系人到手機(jī)里時(shí),這個(gè)聯(lián)系人會(huì)同時(shí)被備份到這個(gè)兩個(gè)賬戶中去,所以這兩個(gè)記錄在raw_contacts表格中的contact_id會(huì)一樣。
| _id | contact_id | account_name | account_type | deleted |
| 1 | 1 | gaojian@gmail.com | com.google | 1 |
| 2 | 1 | gaojian1305039@163.com | 163.com | ?0 |
??????? data表格中記錄的數(shù)據(jù)是對(duì)raw_contacts中數(shù)據(jù)的詳細(xì)描述。這邊的data1存儲(chǔ)的值就是聯(lián)系人在搜索時(shí)會(huì)search的值;data15用來存儲(chǔ)一些比較大的二進(jìn)制對(duì)象,比如說聯(lián)系人的頭像縮略圖。
這一邊需要注意一個(gè)事情:在我們開發(fā)或者測(cè)試的過程中,不要將與MMIETYPE格式不匹配的數(shù)據(jù)存入data中(比如將email的值設(shè)置為1233445),這可能會(huì)造成data數(shù)據(jù)的丟失,更甚者會(huì)導(dǎo)致provider出問題(這個(gè)我猜測(cè)比如在發(fā)送Email的時(shí)候,去選擇contacts,返回值可能會(huì)有問題,沒有驗(yàn)證過)。
| _id | raw_contact_id | mimetype_id | data1 | data2 | data15 |
| 1 | 1 | 6 |
|
| <null> |
| 2 | 1 | 5 | 110 | 1 | <null> |
| 3 | 3 | 6 | gaojian | gao | <null> |
??????? 總結(jié)一下,我們可以從contacts中找到我們想要看的聯(lián)系人,在raw_contacts中可以看到的是這個(gè)聯(lián)系人一些數(shù)據(jù)的基本描述,而data提供給我們的是這個(gè)聯(lián)系人所有的具體信息。這三張表格就是在平時(shí)開發(fā)中,打交道最多的表格。當(dāng)然,如果要獲取和修改群組的信息,那么還會(huì)接觸到group這張表格;而篩選的表格對(duì)應(yīng)的是search_index。
??????
????? 放一張android官方api的圖做個(gè)了斷:
?????????????????????????????????????????????
總結(jié)
以上是生活随笔為你收集整理的理清contactsprovider的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 在matlab中,简单地利用RS485协
- 下一篇: 单片机c语言1602怎么接线,lcd16