需要验证手机号的功能,但是国内的手机多是双卡双待的,无法获取到两个号码。在Android的官方文档是没有提供相应的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;  }  }  

当然不要忘记添加权限:

<uses-permission android:name="android.permission.READ_PHONE_STATE" />

Android 笔记:获取本机手机号(适用于双卡双待手机)相关推荐

  1. Android 获取本机手机号(适用于双卡双待手机)

    需要验证手机号的功能,但是国内的手机多是双卡双待的,无法获取到两个号码.在Android的官方文档是没有提供相应的Api的,因为标准的Andoird是没有双卡的,好像也只有国内才会搞双卡双待的神器吧. ...

  2. Android高手进阶教程(十一)之----Android 通用获取Ip的方法(判断手机是否联网的方法)!

    大家好,我们这一节讲一下,Android获取Ip的一些方法,在我们开发中,有判断手机是否联网,或者想获得当前手机的Ip地址,当然WIFI连接的和 我们3G卡的Ip地址当然是不一样的. 首先我尝试了如下 ...

  3. android 获取手机IMSI码 双卡双待手机

    public static String getImsi(Context context) {String imsi = "";try { //普通方法获取imsiTelephon ...

  4. Android 笔记:识别银行卡,获取银行卡卡号

    这个demo是用的card.io 提供的SDK,识别准确率比较高 先看一下效果图: 扫描界面: 识别成功界面 开始界面 在这里说一下集成的两种方式, 1.直接把途中的文件解压开复制到工程目录下的lib ...

  5. Android开发笔记(一百二十八)手机制式适配

    查看运营商与网络类型 虽然现在4G网络很普及了,但是我国幅员辽阔,4G信号在某些地方接收不良,手机连接很容易掉到3G甚至2G网络.为了让用户在低速环境也能使用App的基础功能,而不至于还在老牛破车地缓 ...

  6. Android 解决双卡双待手机解析短信异常

    开发中,难免会遇到各种各样的适配问题,尤其是经过深度修改定制过的系统,有的无论是软硬件上都有很大的区别,这里不得不提到一种奇葩的机型,没错,那就是双卡双待的手机(比如XT800, A60, S8600 ...

  7. Android Q 获取设备唯一ID(UDID\GUID\UUID\SSAID\GAID)

    Android Q获取设备唯一ID(UDID\GUID\UUID\SSAID\GAID) 一.简介 1.1 问题背景 1.2 关键技术 二.解决方案 2.1 谷歌官方推荐方案 (4种) 2.2 实现方 ...

  8. Android 获取 唯一GUID ,替换 IMEI (兼容 Android 10+获取IMEI问题)

    Android 获取 唯一UUID ,替换 IMEI (兼容 Android 10+获取IMEI问题) 背景 关于 保存GUID方案 第一种,SharedPreferemces存储 第二种,sqlit ...

  9. Android适配 获取手机屏幕的分辨率

    如何将一个应用程序适配在不同的手机上,虽然这不算是一个技术问题,但是对于刚刚做屏幕的开发人员来说,还真不是一件多么简单的事情. 首先:你需要在AndroidManifest.xml文件的<man ...

最新文章

  1. rust 手动关闭子线程_从零开始写 OS (9) —— 内核线程
  2. Oracle入门心得(2)
  3. java super()方法_Java super关键字的使用方法详解
  4. 大湾区|Serverless 线下活动两连发
  5. java编程button_以编程方式在Java Swing中单击GUIbutton
  6. Linux搭建Node.js环境
  7. Synchronized和Lock的区别
  8. 使用Maven配置JBoss / Wildfly数据源
  9. 低秩矩阵分解 matlab,低秩分解的matlab代码看不懂,分解的两个矩阵在哪呀??...
  10. java搭建聊天服务器_使用 ServerSocket 建立聊天服务器-2
  11. [LeetCode]15. 3Sum
  12. 优秀的人都有一个共同点
  13. Masonry 控件详解
  14. Centos 安装 L2tp
  15. 史上最全的全国特产一览表,到哪就买当地最正宗的特产!!!
  16. Linkedin领英如何批量撤回邀请
  17. 听歌识曲也太牛了吧!只“音”奥秘在此……
  18. 常用颜色的RGB分布
  19. 什么是jQuery,jQuery的特点。
  20. “不负热AI 不负7待”,萨摩耶云的新航海之路

热门文章

  1. Python-Django毕业设计服装销售商城系统(程序+Lw)
  2. jQuery删除,添加节点
  3. 判断一个整数是否为素数算法
  4. JUC-JUC三大辅助类
  5. 笔记本合上盖子后无法唤醒?
  6. 如何关闭ie安全设置提示(关闭ie的安全警告)
  7. 谷牛期权涨跌参半 原油、燃油涨潮1%
  8. Spark报错:The pivot column feature has more than 10000 distinct values
  9. 牟合方盖matlab,牟合方盖(中国古代智慧的结晶)【图文】
  10. Jupyter Notebook中的Markdown单元格(1)段落-标题-分隔线