Android系統源碼數據庫(mmssms.db)中幾個表之間的關係.

Android系統源碼數據庫(mmssms.db)中幾個表以前的關係.java

 

首先明瞭未接信息的數據庫的位置在系統android

/data/data/com.android.providers.telephony/databases/mmssms.db 包下。面試

但願你們可以結合源碼中的數據庫

1.       Telephony.java (主要講這些表裏有哪些字段)編程

2.       MmsSmsProvider.java ContentProvider被重寫)網絡

3.       MmsProvider.java (ContentProvider被重寫)app

4.       SmsProvider.java (ContentProvider被重寫ide

5.  Conversation.java  描述 mmssms數據庫的Threadsui

 

前一段時間在開發項目時,遇到這樣的需求,要求將 未接短信,未接彩信的信息顯示在Widget上。當咱們查詢mmssms.db數據庫時,這其中涉及到如下幾張表:編碼

1.       threads

2.       存放短信的表(sms表)

3.       存放彩信的表(pdu,part表)

4.   存放phone number的表( Canonical_address表)

 

可否將未接短信,彩信信息直接顯示在Widget上,關鍵是必需要搞清出這4張表之間的表關係。根據個人編碼經驗,先拋磚引玉地在這裏講解出個人理解

 

對於這幾張表,我只簡單地列出關鍵字段,省略部分均用(….)代替。

如下的 信息 指代(mms,sms


threads() 

查詢該表時,所須要的uri:

MMS_SMS_URI = Uri.parse("content://mms-sms")

MSG_QUERY_URI = Uri.parse("content://mms-sms/ conversations ?simple=true")

能夠這樣獲得 Uri MSG_QUERY_URI = Uri.withAppendedPath(MMS_SMS_URI,    "conversations").buildUpon().appendQueryParameter("simple", "true").build();

  

_id

date

message_count

recipient_ids

snippet

read

has_attchment

………

1

1302468989000

3

15

yulei team:你好,華爲無線網絡技術有限公司,誠邀您來進行面試....

 

0

1

 

2

1302343202189

1

32

京城最後升值時機!地鐵4號線無縫接駁,首二機場伴您起飛!純板社區景觀美宅大產權,樣板間華美綻開90平55萬,三期優惠進行中67659006

 

1

0

 

3

1302359506000

1

33

《人力資源管理》實戰特訓班.主講:企業招聘面試技巧、績效管理與薪酬體系設計於4月14-16日人民大學授課.報名010-57810898

 

0

0

 

4

1302468808000

1

34

6個月與老外交流無障礙!資深外教一對一,定製式教育,口語快速突破的高效課程模式!好方法不怕試,免費體驗課預定:51662230

 

0

0

 

 

threads表字段說明:

_id: 用於區分不一樣的電話號碼,系統會爲不一樣的電話號碼分配不一樣的_id.

date: 收到信息的時間(若是收到來自同一個phone number多條信息,而且有對於一條信息未讀,那麼date表示收到的最後一條信息時的時間)

message_count: 收到的信息的數目(sms+mms

snippet: 若是來自某個phone number,僅僅有一條信息,那麼會是以下狀況

若是是未接短信,表明未接短信的內容

        若是是未接彩信,表明未接彩信的subject.

      若是來自某個phone number,僅僅有多條信息,那麼則是以下狀況

若是是最後一條是未接短信,表明最後一條未接短信的內容

若是是最後一條是未接彩信,表明最後一條未接彩信的subject.

      然而這個字段存儲的僅僅是一條短信內容或者彩信subject的部份內容,其他內容用省略號表示。

read: 0. 表明未讀。 1.表明 已讀

has_attchment: 表明來自該phone number的信息是否包含有附件。 

依據上面的表結構,也許會有人問,phone number 呢?有這樣的疑問是很是正常的,彆着急,學過數據庫的人都知道,表結構之間並非孤立的,而是相互關聯的。phone number 會在另外幾張表中出現。

 

 

Sms

查詢該表時的uri :   URI_SMS_INBOX = Uri.parse("content://sms/inbox") 

_id

thread_id

address

date

read

subject

body

locked

 

 

1

2

076922159797

1302343202189

1

<null>

京城最後升值時機!地鐵4號線無縫接駁,首二機場伴您起飛!純板社區景觀美宅大產權,樣板間華美綻開90平55萬,三期優惠進行中67659006

 

 

 

 

2

3

+8613366790288

1302359506626

0

<null>

《人力資源管理》實戰特訓班.主講:企業招聘面試技巧、績效管理與薪酬體系設計於4月14-16日人民大學授課.報名010-57810898

 

 

 

 

3

4

+8618659506145

1302468808232

0

<null>

6個月與老外交流無障礙!資深外教一對一,定製式教育,口語快速突破的高效課程模式!好方法不怕試,免費體驗課預定:51662230

 

 

 

 

4

1

1252013910095023

1302468964929

0

<null>

Lockscreen team:你好,microsoft公司,誠邀你來面試...

 

 

 

5

1

1252013910095023

1302468989263

0

<null>

Lockscreen team:你好,華爲無線網絡技術有限公司,誠邀您來進行面試....

 

 

 

 

 

Sms表字段說明 

_id: 區分不一樣的短信。

threads_id: (外鍵)引用threads表的_id.

date: 該條短信接收的時間

read: 0表未讀,1表已讀

body: 表示具體的短信內容,(注意,雖然在thread表的snippet字段已經存儲了一部分body,可是那裏的並不全,僅僅是一部分body

locked: 該字段我也不是很清楚,用到的很少,不過若是我標識某條信息爲locked時,當我再刪除這條信息時,系統會提示我「是否刪除locked信息」。 

很明顯以上:_id4.5的短信,來自同一個phone number,也就是說他們的thread_id是相同的.

 

 

Pdu表: 

URI_MMS_INBOX = Uri.parse("content://mms/inbox");

_id

Thread_id

date

Msg_box

read

M_id

sub

Ct_l

m_type

…..

1

1

1302256504

1

1

040817550491000002112

Lockscreïš15151656666

<null>

132

 

 

Pdu表字段說明:

_id: 區分不一樣的彩信

thread_id : 外鍵 (引用thread表的_id)

msg_box: 區分彩信的收件箱,發件箱,草稿箱等.

         很明顯1.表明收件箱

read:是否已讀,0 未讀,1.已讀

sub: 彩信的subject

ct_l: 若是彩信太大,或者因爲網絡緣由,也又是因爲手機設備緣由,dowload失敗,彩信看不了,這個字段就會有彩信的網址(我曾經見到過一次,http://格式的,就是一個網址)

 

Part表:

表的路徑Uri MMS_PART_URI = Uri.parse("content://mms/part")

 

_id

mid

ct

cid

_data

text

 

1

1

application/smil

<mms.smil>

<null>

不用關心

 

2

1

text/plain

<1.txt>

<null>

I am mms body

 

3

1

audio/midi

<2.midi>

/data/data/com.android.providers.telephony/app_parts/PART_130228532714

 

<null>

 

4

1

image/gif

<3.gif>

/data/data/com.android.providers.telephony/app_parts/PART_1302285327200

<null>

 

5

1

image/gif

<4.gif>

/data/data/com.android.providers.telephony/app_parts/PART_1302285327255

<null>

 

6

1

text/plain

<5.txt>

<null>

中國移動飛信搶沙發活動火熱登場!登陸WAP飛信參與活動,iPod nano、手機等大獎天天輪換送!點擊連接查看http://f.10086.cn/f/qzuo[經過移動夢網接入點訪問免流量費]

 

 

7

1

text/plain

<6.txt>

<null>

【飛信提醒您】本條彩信不能以彩信方式回覆

 

  

Part表字段說明: 

_id: 區分某條彩信的不一樣附件(包括文本,圖片,音頻,視頻等格式)

mid: 外鍵,引用pdu表的_id.  指示該附件屬於哪條彩信(一條彩信有可能包含有多個圖片,多個音頻,多個視頻等)

ct: 指示附件是什麼類型的(text/ 表示文本, audio/ 表示音頻, video/表是 視頻  image/

表示圖片)

_data: 標明附件存放在手機的哪一個地方

text: 表示彩信的body

 

 

Canonical_address

查詢這張表所須要的uri:

MMS_SMS_ADDRESS_URI = Uri

                .parse("content://mms-sms/canonical-addresses");

 

_id

address

15

1-391-009-5023

32

076922159797

33

+8613366790288

34

+8618659506145

 

Canonical_address表字段說明:

_id: 外鍵,引用threads表的recipient_id字段

address: 表明給咱們發短的那我的的phone number

 

對於編程時,phone number 1:  1252013423447866

                    若是該聯繫人沒有被存爲聯繫人,那麼此人發彩信時,會在你的手機上這樣顯示

            Phone number 2:   +8613423447866

                    若是該聯繫人沒有被存爲聯繫人,那麼此人發短信時,會在你的手機上這樣顯示 

            Phone number 3:   13423447866

                   若是該聯繫人被存爲聯繫人,那麼此人發彩信以及彩信時時,會在你的手機上這樣顯示

 

很明顯,他們應該屬於同一個聯繫人

 

好了,我就用到這麼多,但願對須要的人有所幫助,具體的本身去查看源碼吧

相關文章
相關標籤/搜索