MTK和高通的都应该怎么识别?

这里困扰了很多的开发者,这一篇可能都是错的,希望能提供参考。

android双卡双待资料


 try {       Class<?> smsManagerClass = null;           Class[] divideMessagePamas = { String.class };           Class[] sendMultipartTextMessagePamas = { String.class,String.class, ArrayList.class, ArrayList.class,ArrayList.class, int.class };           Method divideMessage = null;           Method sendMultipartTextMessage = null;           smsManagerClass = Class.forName("android.telephony.SmsManager");           Method method = smsManagerClass.getMethod("getDefault", new Class[]{});           Object smsManager = method.invoke(smsManagerClass, new Object[]{});           divideMessage = smsManagerClass.getMethod("divideMessage",divideMessagePamas);           sendMultipartTextMessage = smsManagerClass.getMethod("sendMultipartTextMessage", sendMultipartTextMessagePamas);           ArrayList<String> magArray = (ArrayList<String>) divideMessage.invoke(smsManager, content);       sendMultipartTextMessage.invoke(smsManager,phone, "", magArray, null, null,phoneType); } catch (IllegalArgumentException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalAccessException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (InvocationTargetException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (SecurityException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (NoSuchMethodException e) { // TODO Auto-generated catch block e.printStackTrace(); } 


通过反射发现sendMultipartTextMessage多了一个phoneType的参数,这个参数就是这只用GMS还是CDMA卡发送的。phoneType获取方法,iTelephony.getActivePhoneType();//1=GSM,2=CDMA



判断手机是否为双卡:

public static void initIsDoubleTelephone(Context context){ boolean isDouble = true; Method method = null; Object result_0 = null; Object result_1 = null; TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE); try { //只要在反射getSimStateGemini 这个函数时报了错就是单卡手机(这是我自己的经验,不一定全正确) method = TelephonyManager.class.getMethod("getSimStateGemini",new Class[] { int.class }); //获取SIM卡1 result_0 = method.invoke(tm, new Object[] { new Integer(0) }); //获取SIM卡1 result_1 = method.invoke(tm, new Object[] { new Integer(1) }); } catch (SecurityException e) { isDouble = false; e.printStackTrace(); //System.out.println("1_ISSINGLETELEPHONE:"+e.toString()); } catch (NoSuchMethodException e) { isDouble = false; e.printStackTrace(); //System.out.println("2_ISSINGLETELEPHONE:"+e.toString()); } catch (IllegalArgumentException e) { isDouble = false; e.printStackTrace(); } catch (IllegalAccessException e) { isDouble = false; e.printStackTrace(); } catch (InvocationTargetException e) { isDouble = false; e.printStackTrace(); } catch (Exception e){ isDouble = false; e.printStackTrace(); //System.out.println("3_ISSINGLETELEPHONE:"+e.toString()); } SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(context); Editor editor = sp.edit(); if(isDouble){ //保存为双卡手机 editor.putBoolean(ISDOUBLE, true); //保存双卡是否可用 //如下判断哪个卡可用.双卡都可以用 if(result_0.toString().equals("5") && result_1.toString().equals("5")){ if(!sp.getString(SIMCARD, "2").equals("0") && !sp.getString(SIMCARD, "2").equals("1")){ editor.putString(SIMCARD, "0"); } editor.putBoolean(SIMCARD_1, true); editor.putBoolean(SIMCARD_2, true); } else if(!result_0.toString().equals("5") && result_1.toString().equals("5")){//卡二可用 if(!sp.getString(SIMCARD, "2").equals("0") && !sp.getString(SIMCARD, "2").equals("1")){ editor.putString(SIMCARD, "1"); } editor.putBoolean(SIMCARD_1, false); editor.putBoolean(SIMCARD_2, true); } else if(result_0.toString().equals("5") && !result_1.toString().equals("5")){//卡一可用 if(!sp.getString(SIMCARD, "2").equals("0") && !sp.getString(SIMCARD, "2").equals("1")){ editor.putString(SIMCARD, "0"); } editor.putBoolean(SIMCARD_1, true); editor.putBoolean(SIMCARD_2, false); } else {//两个卡都不可用(飞行模式会出现这种种情况) editor.putBoolean(SIMCARD_1, false); editor.putBoolean(SIMCARD_2, false); } }else{ //保存为单卡手机 editor.putString(SIMCARD, "0"); editor.putBoolean(ISDOUBLE, false); } editor.commit(); } 

/**
* @author 张兴业
* 邮箱: xy-zhang#163.com
* android开发进阶群: 278401545
*
*/

更多相关文章

  1. 【阿里云镜像】切换阿里巴巴开源镜像站镜像——Debian镜像
  2. 读取android手机流量信息
  3. Android屏幕分辨率正确获取及PX,DPI,DP,SP等的对应关系
  4. android 获取唯一标识
  5. android拍照与读取相册
  6. Android(安卓)热点开关状态的判断和获取热点ssid
  7. Android软键盘适配问题
  8. AIR Native Extension的使用(Android)一 : 打包ane
  9. android之BitMap

随机推荐

  1. Android 多媒体【转】
  2. Android视频编码器
  3. Android Studio 快速定位错误行
  4. android的RTL支持
  5. ArcGIS Runtime SDKs v10.2.4最新(Android
  6. android 自定义控件之一
  7. Android 8.0的WIFI 架构差异分析
  8. Android中如何修改系统时间(应用程序获得
  9. Android人脸检测方案汇总
  10. Android隐藏标题栏