技術:android聯系人資料庫分析
知識點:分析聯系人中phone和organization資料。
重點:資料類型
聯系人資料庫中,最重要的當然是手機号字段。接下來仔細分析該字段了。
先看android提供了多少種類型:下面是從模拟器中截的類型圖:

看到這麼多截圖,就知道一個手機字段的類型有多少了吧。總共21種類型(實際真實的手機中,當然不會有這麼全)。
來看系統源碼中對類型的定義:
怎麼隻有20種類型,難道我數錯了???
這怎麼可能 ,當然不會少了,還有一個資料就是類型為0的自定義的資料。
接下來,分析phone中,最重要的幾個字段資料:
類型:contactscontract.commondatakinds.phone.content_item_type
phone.number:對應data.data1:表示手機資料,如:13810000000
phone.type:對應data.data2:表示手機類型。注意:為0時,為自定義類型。
phone.label:對應data.data3:表示自定義類型的名稱(隻有type為0時,才有此值)。
分析起來,還是比較簡單。基本沒有太在的難度。
接下來分析organization字段:
先也看看系統提供了多少種類型:
看圖:
類型隻有這三種。
看看源碼對類型的定義:
又缺少了自定義類型。看來自定義類型是單獨定義了。
接着看模拟器中的organization資料操作:
難道中有這兩個字段?
當然不是,不知模拟器中會這麼簡單。
還是看源碼中,定義了哪些可操作的資料吧:
原來還有這麼多資料可以操作。我們就來分析這些字段吧:
類型: contactscontract.commondatakinds.organization.content_item_type
organization.company:對應data.data1:表示:公司/組織
organization.type:對應data.data2:表示類型,就是上面的三種類型
organization.label:對應data.data3:表示自定義類型名稱
organization.title:對應data.data4:表示标題
organization.department:對應data.data5:表示部門
organization.office_location:對應data.data9:表示辦公位置
其它的data6、7、9、10:表示是什麼呢?在不同的手機,代表可能會有差異的。
這些字段,也比較簡單,後面來看看從模拟器中導入出的資料庫吧:
這個時候,發現了什麼?phone字段的data4有資料了,這是代表什麼資料呢?
先看源碼它代表什麼:
這個是什麼?看上面的注釋:明白e164就知道了:
通過度娘查詢到的解釋:
一個e.164号碼由以下幾個部分組成,不同部分之間可以用“-”、“.”或空格等連接配接:
enum+國家碼(1~3位數字)-地區碼(n位數字)-電話号碼(15-n位數字)。
例如:北京的一個電話号碼寫成标準的e.164格式應是:+86-10-62618501
不明白的看百科的解釋:http://baike.baidu.com/view/827326.htm
說白了,隻是一種标準。
再看一下存入的資料圖:
data1:存入的是号碼。但有些手機會有一些分隔符。但data4:是反過來的資料。
但要注意:兩條同類型的資料,是沒有字段作區分。
是以,操作更新的時候要注意了。。。
寫到這裡,基本完成。歡迎一起和大家學習交流!!!
等到最後分析完成,再上傳源碼。。。感謝大家的關注!!!