android雙卡發簡訊,基於5.1.1實現
阿新 • • 發佈:2019-02-12
【原創】作品,轉載請註明出處,請尊重作者的辛苦。
最近開發中遇到了雙卡的問題,關於雙卡查看了好多文章,但是沒有一個能解決問題的,要麼就是定製的或者有廠商提供支援的,我這裡是基於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_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<SubscriptionInfo> list = sManager.getActiveSubscriptionInfoList();
if (list.size() == 2) {// double card
sInfo = list.get(which);
} else {//single card
sInfo = 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();
}
}
}