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();