Moto XT800 是Moto為中國電信定制的一款天翼雙卡雙待手機(jī), 采用的是深度定制的android系統(tǒng). 原生的android系統(tǒng)是不支持雙卡的, 所以Moto對android系統(tǒng)進(jìn)行了大量的修改, 其中變化最大的當(dāng)屬短信和電話服務(wù). 這篇文章主要是講述XT800的短信和電話服務(wù)的機(jī)制, 以及發(fā)送短信和打電話的方法.
原生的android系統(tǒng)的電話和短信服務(wù)
原生的android系統(tǒng)只有一對電話和短信服務(wù). 這兩個服務(wù)的名稱分別是phone和isms. Phone服務(wù)用來打電話和接電話, 所有的電話操作都是通過這個服務(wù)來進(jìn)行的. isms服務(wù)用來發(fā)送和接受短信, 所有的短信操作都是通過這個服務(wù)來進(jìn)行的. API SmsManager.sendTextMessage 實際上是對這個服務(wù)進(jìn)行了一定的封裝. 兩個服務(wù)都是通過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ù)
首先需要說明, XT800有兩個SIM卡卡槽, 卡槽1是CDMA, 卡槽2是GSM. 也就是說,雙卡雙待是有條件的, 必須一個是CDMA,一個是GSM , 而且要放置在正確的位置上.
XT800的電話和短信服務(wù)有兩對, 以對應(yīng)兩個卡CDMA 和GSM.
服務(wù)列表如下:
對于雙卡手機(jī), 可能只插了一張卡, 即使有兩張卡, 也要判斷哪個是GSM, 哪個CDMA的. 下表對三種情況: 雙卡, 單GSM卡, 單CDMA卡 分別測試.
PS: 1.
判斷網(wǎng)絡(luò)類型的方法: iTelephony.getActivePhoneType(); //2 CDMA 1 GSM 2. 判斷是否服務(wù)是否有效的方法 ITelephony iTelephony = ITelephony.Stub.asInterface(phone); iTelephony.isRadioOn();