Android获取手机本机号码的实现方法

Android获取手机本机号码的实现方法

反射TelephoneManager 获取本机号码,注意一下提供的接口有的SIM卡没写是获取不到的,该接口只适配Android5.0以上版本

 public String getMsisdn(int slotId) {
    return getLine1NumberForSubscriber(getSubIdForSlotId(slotId));
  }

权限

<uses-permission android:name="android.permission.READ_PHONE_STATE"/> 
  public class RegisterMessage {
  private static Context mContext;
  private static TelephonyManager mTelephonyManager;
  private ConnectivityManager mConnMngr;
  private static SubscriptionManager mSubscriptionManager;
  public RegisterMessage(Context context) {
    mContext = context;
    mTelephonyManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
    if (mTelephonyManager == null) {
      throw new Error("telephony manager is null");
    }
    mConnMngr = (ConnectivityManager) context
        .getSystemService(Context.CONNECTIVITY_SERVICE);
    mSubscriptionManager = SubscriptionManager.from(mContext);
  } 
public String getMsisdn(int slotId) {//slotId 0为卡1 ,1为卡2
  return getLine1NumberForSubscriber(getSubIdForSlotId(slotId));
} 

rivate int getSubIdForSlotId(int slotId) {
  int[] subIds = getSubId(slotId);
  if (subIds == null || subIds.length < 1 || subIds[0] < 0) {
    return -1;
  }
  MLog.d("getSubIdForSlotId = "+subIds[0]);
  return subIds[0];
}
private static int[] getSubId(int slotId) {
  Method declaredMethod;
  int[] subArr = null;
  try {
    declaredMethod = Class.forName("android.telephony.SubscriptionManager").getDeclaredMethod("getSubId", new Class[]{Integer.TYPE});
    declaredMethod.setAccessible(true);
    subArr = (int[]) declaredMethod.invoke(mSubscriptionManager,slotId);
  } catch (ClassNotFoundException e) {
    e.printStackTrace();
    declaredMethod = null;
  } catch (IllegalArgumentException e2) {
    e2.printStackTrace();
    declaredMethod = null;
  } catch (NoSuchMethodException e3) {
    e3.printStackTrace();
    declaredMethod = null;
  } catch (ClassCastException e4) {
    e4.printStackTrace();
    declaredMethod = null;
  } catch (IllegalAccessException e5){
    e5.printStackTrace();
    declaredMethod = null;
  }catch (InvocationTargetException e6){
    e6.printStackTrace();
    declaredMethod = null;
  }
  if(declaredMethod == null) {
    subArr = null;
  }
  MLog.d("getSubId = "+subArr[0]);
  return subArr;
}
private String getLine1NumberForSubscriber(int subId){
  Method method;
  String status = null;
  try {
    method = mTelephonyManager.getClass().getMethod("getLine1NumberForSubscriber", int.class);
    method.setAccessible(true);
    status = String.valueOf(method.invoke(mTelephonyManager, subId));
  } catch (NoSuchMethodException e) {
    e.printStackTrace();
  } catch (IllegalAccessException e) {
    e.printStackTrace();
  } catch (IllegalArgumentException e) {
    e.printStackTrace();
  } catch (InvocationTargetException e) {
    e.printStackTrace();
  }
  MLog.d("getLine1NumberForSubscriber = "+status);
  return status;
}

如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

(0)

相关推荐

  • Android跳转到通讯录获取用户名称和手机号码的实现思路

    效果图如下所示: 先给大家说下实现android 跳转到通讯录的实现思路: 1.点击跳转到通讯录界面 2.获取通讯录姓名和手机号码 3.回调显示姓名和手机号码 1首先是跳转到通讯录界面 Uri uri = Uri.parse("content://contacts/people"); Intent intent = new Intent(Intent.ACTION_PICK, uri); startActivityForResult(intent, 0); 通过设置通讯录url跳转,可

  • Android实现通讯录效果——获取手机号码和姓名

    首先给大家展示下运行效果图: 由于通讯录在手机里是以数据库贮存的 所以我们可以通过一个方法 context.getContentResolver().query(Phone.CONTENT_URI, null, null, null, null); 来获得通讯录 ,这个方法返回一个游标的数据类型,通过moveToNext()方法来获取所有的手机号码信息 当然读取手机通讯录需要权限 在adnroidManifest文件中声明即可 由于我也实现了打电话的功能 所以也要声明权限 <uses-permi

  • Android获取手机号码和运营商信息的方法

    本文实例讲述了Android获取手机号码和运营商信息的方法.分享给大家供大家参考.具体实现方法如下: 复制代码 代码如下: package com.pei.activity;    import android.app.Activity;  import android.os.Bundle;  import android.view.View;  import android.view.View.OnClickListener;  import android.widget.Button;  i

  • Android获取手机本机号码的实现方法

    Android获取手机本机号码的实现方法 反射TelephoneManager 获取本机号码,注意一下提供的接口有的SIM卡没写是获取不到的,该接口只适配Android5.0以上版本 public String getMsisdn(int slotId) { return getLine1NumberForSubscriber(getSubIdForSlotId(slotId)); } 权限 <uses-permission android:name="android.permission

  • Android获取手机系统版本等信息的方法

    本文实例讲述了Android获取手机系统版本等信息的方法.分享给大家供大家参考.具体如下: String phoneInfo = "Product: " + android.os.Build.PRODUCT; phoneInfo += ", CPU_ABI: " + android.os.Build.CPU_ABI; phoneInfo += ", TAGS: " + android.os.Build.TAGS; phoneInfo += &qu

  • Android获取手机的版本号等信息的代码

    本文实例分享了Android获取手机系统版本等信息的方法,供大家参考,具体内容如下: 第一种代码: String phoneInfo = "Product: " + android.os.Build.PRODUCT; phoneInfo += ", CPU_ABI: " + android.os.Build.CPU_ABI; phoneInfo += ", TAGS: " + android.os.Build.TAGS; phoneInfo +=

  • Android获取手机联系人列表的方法

    本文实例为大家分享了Android获取手机联系人列表的具体代码,供大家参考,具体内容如下 下面直接贴代码 1.先写一个实体类,来放名字和号码 public class PhoneDto { private String name; //联系人姓名 private String telPhone; //电话号码 public String getName() { return name; } public void setName(String name) { this.name = name;

  • Android获取手机屏幕宽高、状态栏高度以及字符串宽高信息的方法

    本文实例讲述了Android获取手机屏幕宽高.状态栏高度以及字符串宽高信息的方法.分享给大家供大家参考.具体如下: 首先定义TextView对象commentText 获取文字的宽高: TextPaint textPaint = new TextPaint(Paint.ANTI_ALIAS_FLAG); textPaint.setTextSize(commentText.getTextSize()); textPaint.setColor(Color.WHITE); FontMetrics fo

  • android 获取手机内存及 内存可用空间的方法

    实例如下: //1.获取内存可用大小,内存路径 String path=Environment.getDataDirectory().getAbsolutePath(); String memoryAvaliSpace= Formatter.formatFileSize(this,getAvailSpace(path)); //2.获取sd卡可用大小,sd卡路径 String sdPath=Environment.getExternalStorageDirectory().getAbsolute

  • Android获取手机位置的实现代码

    本文实例为大家分享了Android获取手机位置的方法,供大家参考,具体内容如下 1.项目Src下创建...service包,然后新建GPSService类 package com.zebra.mobilesafe.service; import java.io.IOException; import java.io.InputStream; import android.app.Service; import android.content.Intent; import android.cont

  • Android获取手机SIM卡运营商信息的方法

    本文实例讲述了Android获取手机SIM卡运营商信息的方法,对于Android程序设计有非常实用的价值.分享给大家供大家参考之用.具体方法如下: 主要功能代码如下: /** * 获取SIM卡运营商 * * @param context * @return */ public static String getOperators(Context context) { TelephonyManager tm = (TelephonyManager) context .getSystemServic

  • Android 获取手机信息实例详解

    Android 获取手机信息 应用信息:包名.版本号.版本名,手机是否有Root权限 手机信息:手机屏幕宽和高.当前可用内存大小.总内存大小.IMEI号.IESI号.手机型号.手机品牌.手机MacAdd.CPU型号.CPU频率 开门见山,以下是Java代码,XML只有一个TextView显示信息. package com.example.getphoneinfo; import java.io.BufferedReader; import java.io.File; import java.io

  • Android 获取手机联系人实例代码详解

    我的风格,废话不多说了,直接给大家贴代码了. 具体代码如下所示: package com.org.demo.demo; import com.org.wangfeng.R; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.Butt

随机推荐