`
xyz_lmn
  • 浏览: 65431 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

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

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

分享到:
评论

相关推荐

    Android判断单双卡(5.0以上),获取手机号码;

    本文将详细介绍如何在Android 5.0及以上版本判断设备是否为单卡或双卡,并获取每个SIM卡的手机号码。 首先,我们需要了解SIM卡的相关概念。SIM卡(Subscriber Identity Module)是移动通信设备中的身份模块,存储了...

    Android 读取IMSI 和IMEI号支持双卡双待

    本文将深入探讨如何在Android平台上读取这两个标识符,特别是在支持双卡双待的设备上获取它们,并判断当前设备通过哪个卡进行网络连接。 IMSI是全球唯一的移动用户识别码,它由MCC(Mobile Country Code,移动国家...

    Android获取双卡双待手机的信息示例代码

    在 getNumber() 方法中,我们首先获取当前手机的手机号码,然后判断当前手机是否为双卡双待手机。如果当前手机为双卡双待手机,那么我们可以使用反射机制来获取双卡双待手机的 SIM 卡信息。 通过这个示例代码,我们...

    双卡手机获取IMSI,兼容多款手机芯片

    在现代智能手机领域,双卡手机已经非常普遍,尤其在中国市场,由于用户对于工作与生活通话需求的区分,双卡手机的使用率极高。本文将详细探讨如何在支持双卡功能的手机上获取国际移动用户识别码(IMSI),并重点讨论...

    获取短信内容

    在Android系统中,获取短信内容是一项常见的功能,例如在开发某些需要验证用户手机的APP时。这个主题主要涉及Android的Content Provider、权限管理和SQLite数据库的知识点。以下将详细阐述这些内容。 首先,Android...

    360手机卫士双卡版 V4.6.0

    360手机卫士是一款Android平台完全免费的手机安全软件,集防垃圾短信,防骚扰电话,防隐私泄漏,对手机进行安全扫描,联网云查杀恶意软件,联网行为实时监控,长途电话IP自动拨号,系统清理手机加速,电话归属地显示...

    Android如何获取双卡手机IMEI的方法示例

    Android 获取双卡手机IMEI 的方法示例 在 Android 开发中,获取双卡手机的IMEI是一件很重要的事情,IMEI 是移动终端设备的唯一标识符。常见的获取IMEI的方法是使用 TelephonyManager 的 getDeviceId() 方法,但是这...

    双卡双待手机的原理.doc

    早期的双卡双待手机实际上是拥有两套系统,两套 RF/两套 BaseBand/两套协议栈,拥有两套系统的双卡双待手机也可以称之为真正的双卡双待手机。 但是,真正的双卡双待手机成本增加了很多,功耗也大大增加了,手机的...

    双卡手机来电防火墙参考源码

    这个"双卡手机来电防火墙参考源码"提供了一个深入理解如何在Android平台上实现这一功能的绝佳机会。源码经过反编译并整理,适合开发者学习和研究。 首先,我们来探讨AIDL(Android Interface Definition Language)...

    android moto 双卡 sim库

    android moto 双卡 sim库

    三星手机单卡改双卡双待破解软件Z3X 29.5破解版

    三星手机单卡改双卡双待破解软件Z3X 29.5破解版,版本比较新,应该支持到S8+,具体没认真看,我的G935F成功改成双卡双待,解压前关掉所有杀毒软件,因为破解补丁会报毒,介意的不要下,请自行衡量,步骤不难,如果...

    获取双卡双待手机IMSI

    双卡双待手机, 获取IMSI 使用了反射,兼容mtk展讯高通不同的芯片 一般手机都能够获取成功 没有高通手机,所以高通的没有亲测 谁测通了评论中回复一下哦

    360手机卫士MTK双卡版

    360手机卫士MTK双卡版,

    android手机获取唯一标识的方法

    第二种方式获取手机卡的序列号,当然这种也不是唯一的,因为有的手机是双卡双待的所以可能会出现空的情况 第三种方式是万能的也就是UUID,随机生成一个标识,但是必须保存在本地,防止下一次进入的时候再次生成随机...

    delphi xe5 android 取得手机号

    在使用Delphi XE5开发Android应用程序时,有时我们需要获取设备的手机号码,这在实现用户注册、身份验证或与其他服务集成时非常有用。本文将详细介绍如何在Delphi XE5环境下,通过Java绑定(JNI)来实现Android手机...

    MTK双卡SIM信息获取及手机网络状态判断

    其中还包含了展讯和高通的双卡获取信息,但由于本人的手机是MTK双卡,所以只进行了MTK的双卡测试,其余2类手机的代码处于注释状态,希望大家用其他手机测试后给出测试代码。 【简单易懂,适合初学者】 注:需要在...

    android安卓挂断电话,双卡挂断的aidl

    1. 检测设备是否支持双卡,可以使用`SubscriptionManager`类来获取SIM卡信息。 2. 在挂断电话前,需要确保当前活动的通话是在目标SIM卡上,避免误操作。 3. 考虑错误处理,如服务未启动、权限不足等情况。 总之,...

    三星s8韩版欧版\亚太等版本单卡改双卡的教程

    针对标题和描述中的内容,本教程将详细介绍如何将三星S8韩版、欧版或亚太版等单卡版本改造为双卡双待手机。 首先,要了解的是,三星S8的原生设计分为单卡和双卡版本,其中某些地区的版本出厂时仅支持单SIM卡。双卡...

    Delphi安卓APP获取手机信息

    Delphi D10.X安卓APP开发中获取硬件信息及手机号,完整代码,安卓5.1到10可使用。请查看压缩包里说明,及https://blog.csdn.net/tanqth/article/details/104779089文章。

    cubieboard2 双卡版 的 android 系统安装 构建cubieboard2双卡版android4.2固件制作.pdf

    本文档旨在指导用户如何为cubieboard2双卡版安装Android 4.2系统,并构建定制化的Android固件。cubieboard2是一款基于Allwinner A20处理器的开源单板计算机,具有强大的计算能力和丰富的扩展接口,适用于多种嵌入式...

Global site tag (gtag.js) - Google Analytics