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