android 双卡手机发短信/判断手机是否为双卡

简介:

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(); } 




     本文转自xyz_lmn51CTO博客,原文链接:http://blog.51cto.com/xyzlmn/1230799,如需转载请自行联系原作者
相关文章
|
8月前
|
存储 API 数据库
自动发短信的软件,批量自动群发短信,手机号电话号生成器【python框架】
这个短信群发系统包含以下核心功能: 随机手机号生成器(支持中国号码) 批量短信发送功能(使用Twilio API)
|
8月前
|
API 数据安全/隐私保护 Python
批量发短信的软件,自动群发短信批量工具,手机号电话生成脚本插件【python】
该工具包含三个核心模块:短信发送核心功能、配置管理系统和命令行界面。使用时需先配置API密钥和短信模板
|
8月前
|
Android开发 数据安全/隐私保护
安卓手机修改设备id, 安卓硬改一键新机,手机机型修改(伪装)
提供了完整的设备信息修改功能,包含设备模板配置、基础信息修改、网络信息修改、模拟器检测绕
|
8月前
|
存储 人工智能 文字识别
三款安卓手机word编辑器下载,Microsoft Word,wps office,Word手机版,手机word编辑查看阅读器,PDF转换器apk下载
WPS Office是一款功能强大的办公软件,支持文档编辑、表格处理和演示文稿制作,兼容多种格式并提供丰富的云服务。它具备低内存占用、快速运行的特点,支持跨设备同步与多人协作,内置海量模板及AI辅助功能,如智能写作和PPT自动生成。此外,还可扫描文件、编辑PDF并转换为其他格式,极大提升办公效率,适合手机用户便捷操作。
842 1
|
9月前
|
Android开发
安卓硬改一键新机工具,一键修改手机型号,串号网卡Imei、sn码【仅供学习参考】
声明部分:仅供学习参考使用,基于Xposed框架实现的设备信息伪装模块的完整代码,包含多个功能模块:
|
8月前
|
API Android开发 数据安全/隐私保护
|
9月前
|
存储 JSON API
安卓ck提取工具,可提取手机cookie插件,AUTOJS即可实现
怎么用autojs提取手机端的CK?其实autojs是支持提取ck的但是他提取的不是浏览器的CK,二十他自身浏览器环境的c
|
9月前
|
Java Android开发
安卓手机硬改工具, 设备型号修改神器, 安卓硬改一键新机
通过Java创建可执行JAR来修改安卓设备信息。核心功能包括读取系统属性
|
9月前
|
存储 Android开发
一键新机安卓无限, 免root改手机机型, 手机信息修改型号伪装
AndroidManifest.xml配置 资源文件管理 各系统服务的Hook
|
Ubuntu Linux Android开发
termux+anlinux+Rvnc viewer来使安卓手机(平板)变成linux服务器
本文介绍了如何在Android设备上安装Termux和AnLinux,并通过这些工具运行Ubuntu系统和桌面环境。
3416 3
termux+anlinux+Rvnc viewer来使安卓手机(平板)变成linux服务器