双卡发送和接收彩信的解决方法,因每一个厂商都有自己的接口,下面列出一些我常用到的的接口:
第一种:
1、点击发送(卡1或卡2)按钮时,就把数据连接(data connect)切换到对应的卡上。问题来了,如何切换,用哪个api? 一般厂商和原生android源码里都有一个管理和订阅card信息的隐藏管理类:"android.telephony.SubscriptionManager" 或 "android.telephony.MSimTelephonyManager" 。这2个类第三方app是不能直接使用的,所有我们需要使用反射来调用。
反射android.telephony.SubscriptionManager:
反射android.telephony.MSimTelephonyManager:
这2个方法都有个参数,大多数的手机都是0(代表卡1)和1(代表卡2),也有1和2的。这样就可以把数据连接切换到相应的卡了。彩信就可以发送和接收了,其实这样相当走的是单卡流程。注意:这样有一个问题,数据连接切换过去,彩信发送和接收完成了,数据连接并不会切换回来。所以,还要我们手机调用上面的方法切换原来设置的数据连接。怎么得到原来的值?肯定要我们切换之前就要获取用户之前设置的数据连接是哪个卡。获取方法如下:
SubscriptionManager:
MSimTelephonyManager:
还需要注意的是:可能setXXX和getXXX有些手机会不同,只要打印下SubscriptionManager和MSimTelephonyManager有些什么方法就很容易解决了。
第二种:
有些手机直接就可以在startUsingNetworkFeature建立数据连接和stopUsingNetworkFeature断开数据连接。注意:subId 一般是0或1(1或2)。也有手机不是stopUsingNetworkFeatureGemini 和 startUsingNetworkFeatureGemini这种的,直接就是startUsingNetworkFeature 和 stopUsingNetworkFeature ,那怎么区分现在是卡1或卡2呢?关键在Feature常量的定义:如联想有些手机定义是:enableMMSSUB0 (卡1)和 enableMMSSUB1(卡2),Feature的具体值是多少,得看每一个手机厂商自己的定义了。支持这种的手机有个好处,第三方的app就不会在维护数据连接了。厂商帮我们做了。startUsingNetworkFeatureMSMS同下,只是名字不同,反射下就明白。
建立数据连接:
断开数据连接: