android双卡发短信,基于5.1.1实现

来源:互联网 发布:男士钱包网络代理 编辑:程序博客网 时间:2024/05/20 15:10

【原创】作品,转载请注明出处,请尊重作者的辛苦。


最近开发中遇到了双卡的问题,关于双卡查看了好多文章,但是没有一个能解决问题的,要么就是定制的或者有厂商提供支持的,我这里是基于android 5.1.1实现的双卡发送短信,这里需要用的反射,下面直接上代码,供大家参考:


一、首先实例化相关类

TelephonyManager mTelephonyManager = (TelephonyManager) mContext.getSystemService(Context.TELEPHONY_SERVICE);Class<TelephonyManager> clz = (Class<TelephonyManager>) mTelephonyManager.getClass();

二、调用相关方法

1、获取sim的状态,参数对应sim卡的序号,分别为0(卡1)和1(卡2):

public int getSimState(int slotID) {int status = 0;try {Method mtd = clz.getMethod("getSimState", int.class);mtd.setAccessible(true);status = (Integer) mtd.invoke(mTelephonyManager, slotID);} catch (NoSuchMethodException e) {e.printStackTrace();} catch (IllegalAccessException e) {e.printStackTrace();} catch (IllegalArgumentException e) {e.printStackTrace();} catch (InvocationTargetException e) {e.printStackTrace();}return status;}

返回的值是sim卡的状态码,对应值:

TelephonyManager.SIM_STATE_READYTelephonyManager.IM_STATE_ABSENTTelephonyManager.SIM_STATE_NETWORK_LOCKEDTelephonyManager.SIM_STATE_PIN_REQUIREDTelephonyManager.SIM_STATE_READYTelephonyManager.SIM_STATE_UNKNOWN

如果返回的是
TelephonyManager.SIM_STATE_READY
那就是可用状态;

2、发送短信

private void sendSms(final int which) {SubscriptionInfo sInfo = null;final SubscriptionManager sManager = (SubscriptionManager) mActivity.getSystemService(Context.TELEPHONY_SUBSCRIPTION_SERVICE);List<SubscriptionInfo> list = sManager.getActiveSubscriptionInfoList();
if (list.size() == 2) {// double cardsInfo = list.get(which);} else {//single cardsInfo = list.get(0);}if (sInfo != null) {<span style="white-space:pre"></span>//provider是对应10086、10010、10000
<span style="white-space:pre"></span>//这个需要根据sik卡的Mcc和Mnc自己判断,这里就不贴出来了String provider = matchIMSI(String.valueOf(sInfo.getMcc()) + "0"+ String.valueOf(sInfo.getMnc()));int subId = sInfo.getSubscriptionId();Log.i(TAG, " select provider = " + provider + ", subid = "+ subId);SmsManager manager = SmsManager.getSmsManagerForSubscriptionId(subId);if (!TextUtils.isEmpty(provider)) {manager.sendTextMessage(provider, null, "YE", null, null);Toast.makeText(mActivity, "信息正在发送,请稍候", Toast.LENGTH_SHORT).show();} else {Toast.makeText(mActivity, "无法正确的获取SIM卡信息,请稍候重试",Toast.LENGTH_SHORT).show();}}}





0 0
原创粉丝点击