android 手机号分段_android开发中想获取双卡手机号码,两个号码的怎样获取?
展开全部
Android的官方文档是32313133353236313431303231363533e58685e5aeb931333337626230没有提供相应的Api的,因为标准的Andoird是没有双卡的,好像也只有国内才会搞双卡双待的神器吧。以下记录一下做这个功能所学习到的东西。直接上代码:
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.List;
import android.app.Activity;
import android.content.Context;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.telephony.CellInfo;
import android.telephony.TelephonyManager;
import android.view.Menu;
import android.widget.TextView;
public class MainActivity extends Activity
{
private TextView tv;
private TextView tv2;
// ///
static String ISDOUBLE;
static String SIMCARD;
static String SIMCARD_1;
static String SIMCARD_2;
static boolean isDouble;
// //
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tv = (TextView) findViewById(R.id.text);
tv2 = (TextView) findViewById(R.id.text2);
tv2.setText("不知道哪个卡可用!");
getNumber();
}
private void getNumber()
{
TelephonyManager tm = (TelephonyManager) this.getSystemService(this.TELEPHONY_SERVICE);
String phoneNumber1 = tm.getLine1Number();
// String phoneNumber2 = tm.getGroupIdLevel1();
initIsDoubleTelephone(this);
if (isDouble)
{
// tv.setText("这是双卡手机!");
tv.setText("本机号码是:" + " " + phoneNumber1 + " " + "这是双卡手机!");
} else
{
// tv.setText("这是单卡手机");
tv.setText("本机号码是:" + " " + phoneNumber1 + " " + "这是单卡手机");
}
}
public void initIsDoubleTelephone(Context context)
{
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卡2
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);
tv2.setText("双卡可用");
} 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);
tv2.setText("卡二可用");
} 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);
tv2.setText("卡一可用");
} else
{// 两个卡都不可用(飞行模式会出现这种种情况)
editor.putBoolean(SIMCARD_1, false);
editor.putBoolean(SIMCARD_2, false);
tv2.setText("飞行模式");
}
} else
{
// 保存为单卡手机
editor.putString(SIMCARD, "0");
editor.putBoolean(ISDOUBLE, false);
}
editor.commit();
}
@Override
public boolean onCreateOptionsMenu(Menu menu)
{
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
不要忘记添加权限:
已赞过
已踩过<
你对这个回答的评价是?
评论
收起
android 手机号分段_android开发中想获取双卡手机号码,两个号码的怎样获取?相关推荐
- android 手机号分段_android 手机号分段_android系统实现手机号添加分割符
通过调用系统的PhoneNumberFormattingTextWatcher类来实现 ` import android.annotation.SuppressLint; import android ...
- android 手机号分段_Android EditText输入手机号自带分隔符
图片发自简书App 输入手机号时,为了看着更加方便可能会显示成xxx xxxx xxxx,如图 为了这个需求,自己简单的研究了一下,写了个这个小东西自己练练思维 简单来看就是按照3-4-4来分割,通过 ...
- Android记录22-关于开发中账号绑定的逻辑处理
Android记录22-关于开发中账号绑定的逻辑处理 转载请注明:IT_xiao小巫 博客地址:http://blog.csdn.net/wwj_748 前言 本篇博客要跟大家分享的是开发中我 ...
- android怎么监听多点触摸_Android开发中多点触摸的实现方法
Android多点触控需要LCD驱动和程序设计支持,其实我们只要采用电容屏触摸手机的技术即可,接下来,就让爱站技术频道小编来讲解Android开发中多点触摸的实现方法吧! 多点触摸技术在实际开发过程中 ...
- android引用的java包_Android开发中jar包的创建及引用
jar包有两种,一种是纯粹的库功能,没有main入口函数,故无法直接执行:一种是包含main的可执行包! 如有hello/hello.java文件: $ cd hello/$ javac hello. ...
- mvvm模式和mvc的区别_Android 开发中的架构模式 -- MVC / MVP / MVVM
预备知识 了解 Android 基本开发 看完本文可以达到什么程度 了解如何分析一个架构模式 掌握 MVC,MVP,MVVM 架构定义和实现 更多面试内容,面试专题,flutter视频 全套,音视频从 ...
- Android短视频app开发中如何实现上下滑动切换效果
在大部分短视频app开发中,都会在app内增加上下滑动切换视频的功能,即下滑切换到下一条短视频,上滑切回到上一条.这种机制可以给用户带来良好的视觉体验,云豹作为优秀的app源码供应商,在该效果的实现上 ...
- android java 指针异常处理,Android程序员日常开发中异常总结
CaptainAndroid.png Java异常 平时开发中遇到的java异常很多,因为引起原因一目了然,当然也有不好解决的,比如一个简单的空指针异常你可能始终无法找到其为空的原因,甚至使用前还做了 ...
- android音乐播放器底部,android音乐播放器开发中所遇到的bug及解决方法
这几天在写一个android版的音乐播放器,在开发过程中遇到了一些小问题 小bug,最后经过一番调试与查找 终于发现问题所在.现在将开发中的问题与解决方法分享给大家... 一,音乐播放器的界面我采用的 ...
最新文章
- 乐高机器人教室布置图片大全_全国青少年机器人技术等级考试(上海宝山站)顺利举行...
- android 网络加载图片点击大图后 浏览 可 缩放,Android 网络加载图片点击大图后 浏览 可 缩放...
- python提取excel数据-使用Python从Excel获取运营数据
- 《我的青春谁做主》我想要的结局
- Microsoft PHP.Net ?
- 杭电2013-蟠桃记(C++)
- smarty中js的调用方法
- zabbix安装及简单配置
- Python之configparser模块详解和使用
- Android odex文件反编译
- 学嵌入式必须掌握的经验
- 简明Python3教程 17.更多
- CAN协议要点及车辆CAN协议破解
- 怎样去除抖音短视频的水印,快速去除视频水印的方法
- html5字体加粗斜体,font设置字体加粗
- 中间件系列六 RabbitMQ之Topic exchange 用法
- 20.4.26工作感想
- 算法的时间复杂度排序
- 【315】备份全盘和备份C盘的区别
- 区块链与merkle tree