android 双卡手机发短信/判断手机是否为双卡
通过反射发现sendMultipartTextMessage多了一个phoneType的参数,这个参数就是这只用GMS还是CDMA卡发送的。
phoneType获取方法,iTelephony.getActivePhoneType();//1=GSM,2=CDMA
- 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();
- }
判断手机是否为双卡:
- 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();
- }
android 双卡手机发短信/判断手机是否为双卡的更多相关文章
- 向android模拟器打电话发短信的简单方法
在开发android应用程序时,有时候需要测试一下向android手机拨打电话发送短信时该应用程序的反应.譬如编写一个广播接收器,来提示用户有短信收到或者处理短信,就需要向该手机发送短信来进行测试.这 ...
- android打电话、发短信实现
打电话: Intent intent = newIntent(Intent.ACTION_CALL,Uri.parse("tel:"+"156666666666" ...
- Android——SMS接收发短信与运行权限
好久没写了,最近学习Android的相关知识,包括UI组件与布局.Activity生命周期等,而这次要讲的是,Broadcast Receiver的相关知识,主要是接收发短信,SmsManager.S ...
- 如何向Android模拟器打电话发短信
1. 启动Android Emulator, 查看标题栏找出端口.一般是android emulator(5554),其中5554就是端口. 2. 打开命令行,输入telnet localhost 5 ...
- 【转】如何向Android模拟器打电话发短信
转载地址:http://hi.baidu.com/jeremylai/item/420f9c9fe4881fccb62531f7 1. 启动Android Emulator, 查看标题栏找出端口.一般 ...
- 使用Python往手机发送短信(基于twilio模块)
官网是https://www.twilio.com twilio的一句话介绍——提供SDK帮你连接世界上所有人,你可以很方便的调用他们提供的接口来给指定手机发短信,打电话. 首先在twilio的官网注 ...
- Android Tips: 打电话和发短信
利用Android打电话非常简单,直接调用Android内在的电话功能就可以了. btnDail.setOnClickListener(new OnClickListener(){ @Override ...
- 【319】Python 通过 Twilio 发短信
参考:python利用twilio模块给自己发短信 参考:使用python实现往手机发短信(基于twilio) 步骤如下: 登录 Twilio 网站注册,貌似需要***,包括用户名.密码.手机号.项目 ...
- Android实例-打电话、发短信和邮件,取得手机IMEI号(XE8+小米2)
结果: 1.不提示发短信卡住,点击没有反映,我猜想,可能是因为我用的是小米手机吧. 2.接收短信报错,我猜想可能是我改了里面的方法吧(哪位大神了解,求指教). 3.project -->opti ...
随机推荐
- 【python之路6】pycharm的使用
1.pycharm简介 PyCharm 是我众多python编辑器中比较好的一个.而且可以跨平台,在macos和windows下面都可以用,这点比较好. PyCharm是一种Python IDE,带有 ...
- Java设计模式之——单例模式
引自百度百科: 单例模式是一种常用的软件设计模式.在它的核心结构中只包含一个被称为单例类的特殊类. 通过单例模式可以保证系统中一个类只有一个实例而且该实例易于外界访问,从而方便对实例个数的控制并节约系 ...
- SCU3502 The Almost Lucky Number
Description A lucky number is a number whose decimal representation contains only the digits \(4\) a ...
- String 类型的相关转换
题目: what is the result of the expression 5.4+"3.2"? 答案: 当一个运算数为原始数据类型,另外一个为字符串时,则基本数据类型会转化 ...
- SPRING IN ACTION 第4版笔记-第二章-004-Bean是否单例
spring的bean默认是单例,加载容器是会被化,spring会拦截其他再次请求bean的操作,返回spring已经创建好的bean. It appears that the CompactDisc ...
- Linux 安装Maven和nexus代理仓库
1 说明 2 安装步骤 2.1 下载地址 2.2 MAVEN安装步骤 2.2.1 解压Maven安装包 2.2.2 配置环境变量 2.3 Sonatyp ...
- [cocos2dx]计算scrollview元素的index
scrollview的原生代码没有提供元素对齐功能 通过下面介绍的index计算方法以及scrollview自带的设置位置方法 void setContentOffsetInDuration(CCPo ...
- dump 验证实例恢复的起点和终点
什么时候会产生实例恢复呢?当你数据库服务器异常断电,重启数据库就会发生实例恢复.实例恢复是由数据库自动完成的,无须DBA的干涉.当然这里有个前提条件:数据文件. 在线日志文件.控制文件不得有损坏. 我 ...
- dom4j中 selectSingleNode 或selectNodes获取不到节点的原因总结 (转)
没想到搞个dom4j会出这么多怪错.. 最近在研究XBRL GL的有关内容,在项目中要求吧XBRL GL导入到11179注册库中,根据11179建立数据库,然后从XBRL GL分类标准中导入数据到数据 ...
- 论游戏中Buff的实现 [转]
论游戏中Buff的实现 分类: C/C++ 游戏开发2012-09-13 14:30 574人阅读 评论(6) 收藏 举报 c++游戏开发 源地址:http://blog.codingnow.com/ ...