Moto XT800 Moto為中國電信定制的一款天翼雙卡雙待手機, 采用的是深度定制的android系統. 原生的android系統是不支持雙卡的, 所以Motoandroid系統進行了大量的修改, 其中變化最大的當屬短信和電話服務. 這篇文章主要是講述XT800的短信和電話服務的機制, 以及發送短信和打電話的方法.

原生的android系統的電話和短信服務

原生的android系統只有一對電話和短信服務. 這兩個服務的名稱分別是phoneisms. 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卡卡槽, 卡槽1CDMA, 卡槽2GSM. 也就是說,雙卡雙待是有條件的, 必須一個是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();