Moto XT800 是Moto為中國(guó)電信定制的一款天翼雙卡雙待手機(jī), 采用的是深度定制的android系統(tǒng). 原生的android系統(tǒng)是不支持雙卡的, 所以Moto對(duì)android系統(tǒng)進(jìn)行了大量的修改, 其中變化最大的當(dāng)屬短信和電話服務(wù). 這篇文章主要是講述XT800的短信和電話服務(wù)的機(jī)制, 以及發(fā)送短信和打電話的方法.
原生的android系統(tǒng)的電話和短信服務(wù)
原生的android系統(tǒng)只有一對(duì)電話和短信服務(wù).
這兩個(gè)服務(wù)的名稱分別是phone和isms. Phone服務(wù)用來(lái)打電話和接電話, 所有的電話操作都是通過(guò)這個(gè)服務(wù)來(lái)進(jìn)行的. isms服務(wù)用來(lái)發(fā)送和接受短信, 所有的短信操作都是通過(guò)這個(gè)服務(wù)來(lái)進(jìn)行的. API SmsManager.sendTextMessage 實(shí)際上是對(duì)這個(gè)服務(wù)進(jìn)行了一定的封裝. 兩個(gè)服務(wù)都是通過(guò)Aidl進(jìn)行類似IPC的跨進(jìn)程調(diào)用的.
Ps1: 獲取當(dāng)前系統(tǒng)服務(wù)的方法
>adb shell
$service list
PS2: 在程序中獲取系統(tǒng)服務(wù)的方法
需要用到系統(tǒng)隱藏api,
IBinder iBinder
= ServiceManager.getService(String ServiceName); //獲取系統(tǒng)相應(yīng)的服務(wù)
如果調(diào)用的話, 需要使用aidl
ISms isms =
ISms.Stub.asInterface(iBinder);
Xt800的電話和短信服務(wù)
首先需要說(shuō)明, XT800有兩個(gè)SIM卡卡槽, 卡槽1是CDMA, 卡槽2是GSM. 也就是說(shuō),雙卡雙待是有條件的, 必須一個(gè)是CDMA,一個(gè)是GSM , 而且要放置在正確的位置上.
XT800的電話和短信服務(wù)有兩對(duì), 以對(duì)應(yīng)兩個(gè)卡CDMA 和GSM.
服務(wù)列表如下:

對(duì)于雙卡手機(jī), 可能只插了一張卡, 即使有兩張卡, 也要判斷哪個(gè)是GSM, 哪個(gè)CDMA的. 下表對(duì)三種情況: 雙卡, 單GSM卡, 單CDMA卡 分別測(cè)試.

PS:
1.
判斷網(wǎng)絡(luò)類型的方法:
iTelephony.getActivePhoneType(); //2 CDMA 1 GSM
2. 判斷是否服務(wù)是否有效的方法
ITelephony iTelephony = ITelephony.Stub.asInterface(phone);
iTelephony.isRadioOn();