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

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


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


一、首先实例化相关类

TelephonyManager mTelephonyManager = (TelephonyManager) mContext
				.getSystemService(Context.TELEPHONY_SERVICE);
Class clz = (Class) 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_READY
TelephonyManager.IM_STATE_ABSENT
TelephonyManager.SIM_STATE_NETWORK_LOCKED
TelephonyManager.SIM_STATE_PIN_REQUIRED
TelephonyManager.SIM_STATE_READY
TelephonyManager.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 list = sManager.getActiveSubscriptionInfoList();

		if (list.size() == 2) {// double card
			sInfo = list.get(which);
		} else {//single card
			sInfo = list.get(0);
		}

		if (sInfo != null) {
			//provider是对应10086、10010、10000
			//这个需要根据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();
			}
		}
	}





你可能感兴趣的:(Android)