摘要:雙卡數(shù)據(jù)庫適配流程根據(jù)系統(tǒng)數(shù)據(jù)內(nèi)容來做適配開發(fā),找到區(qū)分雙卡的標(biāo)識字段和字段對應(yīng)的值。主要涉及的數(shù)據(jù)庫表有兩個(gè)短信彩信電話。需要更新中的數(shù)據(jù)中的字段值來標(biāo)識卡槽。文騰訊優(yōu)測李艷超
摘要:android雙卡數(shù)據(jù)庫適配是常見的適配難題,騰訊優(yōu)測是app自動(dòng)化適配測試平臺,提供APP兼容性適配測試,遠(yuǎn)程真機(jī)租用等多維度的測試服務(wù),為大家奉上“優(yōu)分享”-騰訊內(nèi)部的移動(dòng)研發(fā)測試干貨精選~
關(guān)鍵詞:數(shù)據(jù)庫適配,雙卡適配,移動(dòng)研發(fā),android適配
許多APP都希望獲取用戶通訊錄聯(lián)系人,利用通訊錄關(guān)系鏈信息來豐富產(chǎn)品功能。在讀取系統(tǒng)聯(lián)系人數(shù)據(jù)庫的ContentProvider時(shí),對于雙卡雙待手機(jī),電話和短信數(shù)據(jù)都需要標(biāo)識來自哪張卡。
Android 5.0開始加入Dual Sim支持,Android 官方方案和mtk的方案十分類似,感興趣的小伙伴可以直接移步mtk方案實(shí)現(xiàn)方式。
根據(jù)系統(tǒng)ContentProvider數(shù)據(jù)內(nèi)容來做適配開發(fā),找到區(qū)分雙卡的標(biāo)識字段和字段對應(yīng)的值。為了以下闡述內(nèi)容清晰,這里約定:主卡—0卡,副卡—1卡。
主要涉及的數(shù)據(jù)庫表有兩個(gè):短信彩信、電話。
如果手機(jī)安裝了安全軟件有可能”污染“數(shù)據(jù)庫數(shù)據(jù),清空數(shù)據(jù)庫中的數(shù)據(jù)可以保證以下操作的準(zhǔn)確性。
2.使用系統(tǒng)短信程序和撥號程序分別使用1卡、2卡發(fā)送短信,撥打電話保證使用的是系統(tǒng)短信和撥號程序,第三方APP會接管系統(tǒng)程序,開始操作前需卸載第三方APP。
3.讀取數(shù)據(jù)庫值,找到區(qū)分卡槽的值對于可以root的手機(jī),可以直接找到對應(yīng)的數(shù)據(jù)庫文件,導(dǎo)出后使用SQLite查看器來查詢數(shù)據(jù)庫中的值。
短信、彩信數(shù)據(jù)庫位置:
/data/data/com.android.providers.telephony/mmssms.db
電話數(shù)據(jù)庫位置:
data/data/data/com.android.providers.contacts/contacts2.db
注意:對應(yīng)的.db-wal、.db-shm文件也需要導(dǎo)出,SQLite引入了日志預(yù)寫模式(WAL),如果不導(dǎo)出這兩個(gè)文件,數(shù)據(jù)更新不及時(shí)。
雙卡數(shù)據(jù)庫適配常見類型都有哪些? 1.新增標(biāo)識字段常見于:三星、moto等
舉例:手機(jī)的短信數(shù)據(jù)庫
通過上圖,我們可以知道短信數(shù)據(jù)庫表中:
標(biāo)識雙卡的字段名:sim_id,字段的值:卡0—-0 || 卡1—-1
這種情況相對簡單,在做短信、電話相關(guān)的APP只需要:
(1)確定對應(yīng)的卡槽
(2)需要數(shù)據(jù)庫操作時(shí),增加一列對于雙卡標(biāo)識字段的操作
常見于mtk系列芯片的手機(jī)
現(xiàn)象:
按照1中的方法找到了區(qū)分卡槽的字段和值,發(fā)現(xiàn)當(dāng)用戶換卡時(shí),標(biāo)識字段對應(yīng)的值會隨著變化,每換一張新卡,對應(yīng)的simId值+1。
問題原因:
如下圖所顯示,這類手機(jī)新建了一張表,用來記錄SIM卡的信息。對應(yīng)的uri為:Uri uri = Uri.parse(“content://telephony/siminfo”);
解釋:
slot字段值為0:主卡
slot字段值為1:副卡
slot字段值為-1:此卡沒有安裝在卡槽
如下圖,sms表和siminfo表的映射關(guān)系。sms表中的simId字段存儲的是siminfo表中對應(yīng)的_id,siminfo中對應(yīng)的0,1是卡槽的標(biāo)識。
注意:siminfo表是系統(tǒng)維護(hù)的,第三方APP只需讀取,不需要進(jìn)行“寫”操作。
解決辦法:
(1)確立映射關(guān)系
在一定的觸發(fā)時(shí)機(jī)(應(yīng)用啟動(dòng),監(jiān)聽iteminfo數(shù)據(jù)庫信息變化),觸發(fā)iteminfo表的查詢,將查詢結(jié)果建立成映射關(guān)系。
0—-4
1—-3
(2)需要操作時(shí)根據(jù)卡槽獲得映射值寫入db
mtk在雙卡雙待方面的積累是很深厚長久的,在功能機(jī)時(shí)代就有非常廣泛的應(yīng)用。那么為什么還要如此麻煩的新建一張表來做這個(gè)映射呢?為什么不使用方案1 簡單的處理呢?
場景:
使用1中數(shù)據(jù)庫新增字段的方法,對于WCDMA聯(lián)通定制機(jī)(同時(shí)G卡制式),如果用戶將兩張卡對調(diào)位置,將會發(fā)生什么情況?
在方案1中,所有的信息直接和sms表中的雙卡標(biāo)識字段綁定,如果換卡的話將無法判斷信息來自那個(gè)SIM卡,在上述的場景發(fā)生時(shí),用戶所有的信息和SIM卡發(fā)生混亂。
在方案2中,因?yàn)閟ms和siminfo存在映射關(guān)系,siminfo表中的icc_id可以唯一標(biāo)識一張SIM卡,不會發(fā)生方案1中出現(xiàn)的換卡可能造成的信息錯(cuò)亂問題。
思考總結(jié):
方案2的存在是合理的,因?yàn)榉桨?同時(shí)存在缺陷。
常見于:酷派系列手機(jī)
特殊點(diǎn):root沒有成功,無法查看data/data目錄下內(nèi)容
電話數(shù)據(jù)庫適配:
使用查詢數(shù)據(jù)庫的工具
清空db后操作:使用0、1卡分別向5520撥打電話,使用0卡向10010撥打電話。通過記錄的查詢結(jié)果可知,電話標(biāo)識字段為moduletype,字段對應(yīng)的值為0—–1 || 1——2
短信數(shù)據(jù)庫適配:
清空db后向5520發(fā)送4條短信,見下圖:
當(dāng)使用查詢工具查詢結(jié)果時(shí),會出現(xiàn)下圖的情況,其中sim_id通常在方案1中作為雙卡標(biāo)識的字段,但是在這款手機(jī)上值均為-1。(可以注意到iteminfo字段中的值時(shí)累加的1、2、3、4)
查詢iteminfo數(shù)據(jù)庫表的結(jié)果:Uri.parse(“content://mms-sms/itemInfo”);
數(shù)據(jù)庫表關(guān)聯(lián)關(guān)系:適配方法:
(1)每次在sms表插入一條數(shù)據(jù),iteminfo會對應(yīng)的增加一條記錄,這個(gè)是由系統(tǒng)provider自動(dòng)完成的。
(2)需要更新iteminfo中的數(shù)據(jù)中的network_type字段值來標(biāo)識卡槽。
總結(jié):
不僅系統(tǒng)聯(lián)系人需要數(shù)據(jù)庫適配,當(dāng)APP開發(fā)過程中使用到系統(tǒng)數(shù)據(jù)庫的時(shí)候,可能也會遇到類似的適配問題。這時(shí),也可以使用類似的方式處理。
文/騰訊優(yōu)測 李艷超
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/17556.html
閱讀 1653·2021-11-23 09:51
閱讀 2677·2021-11-22 09:34
閱讀 1315·2021-10-14 09:43
閱讀 3661·2021-09-08 09:36
閱讀 3206·2019-08-30 12:57
閱讀 2025·2019-08-30 12:44
閱讀 2516·2019-08-29 17:15
閱讀 3014·2019-08-29 16:08