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

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

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