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