Android获取SIM卡信息和当前手机号码
程序员文章站
2022-01-20 23:13:55
...
手机号码不是所有的SIM卡都能获取。只是有一部分可以拿到。这个是由于移动运营商没有把手机号码的数据写入到SIM卡中,能够读取SIM卡号的话应该有前提,那就是SIM卡已经写入了本机号码,不然是无法读取的。具体的什么样的卡能获取到号码,要自己具体测试才可以,就算是同一个运营商同一个套餐的卡也会有差别。
直接附上代码,具体实现new一个PhoneInfoUtils对象,调用其方法即可。
public class PhoneInfoUtils { private static String TAG = "PhoneInfoUtils"; private TelephonyManager telephonyManager; //移动运营商编号 private String NetworkOperator; private Context context; public PhoneInfoUtils(Context context) { this.context = context; telephonyManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE); } //获取sim卡iccid public String getIccid() { String iccid = "N/A"; iccid = telephonyManager.getSimSerialNumber(); return iccid; } //获取电话号码 public String getNativePhoneNumber() { String nativePhoneNumber = "N/A"; nativePhoneNumber = telephonyManager.getLine1Number(); return nativePhoneNumber; } //获取手机服务商信息 public String getProvidersName() { String providersName = "N/A"; NetworkOperator = telephonyManager.getNetworkOperator(); //IMSI号前面3位460是国家,紧接着后面2位00 02是中国移动,01是中国联通,03是中国电信。 //Flog.d(TAG,"NetworkOperator=" NetworkOperator); if (NetworkOperator.equals("46000") || NetworkOperator.equals("46002")) { providersName = "中国移动";//中国移动 } else if(NetworkOperator.equals("46001")) { providersName = "中国联通";//中国联通 } else if (NetworkOperator.equals("46003")) { providersName = "中国电信";//中国电信 } return providersName; } public String getPhoneInfo() { TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE); StringBuffer sb = new StringBuffer(); sb.append(" Line1Number = " tm.getLine1Number()); sb.append(" NetworkOperator = " tm.getNetworkOperator());//移动运营商编号 sb.append(" NetworkOperatorName = " tm.getNetworkOperatorName());//移动运营商名称 sb.append(" SimCountryIso = " tm.getSimCountryIso()); sb.append(" SimOperator = " tm.getSimOperator()); sb.append(" SimOperatorName = " tm.getSimOperatorName()); sb.append(" SimSerialNumber = " tm.getSimSerialNumber()); sb.append(" SubscriberId(IMSI) = " tm.getSubscriberId()); return sb.toString(); } }
楼主项目用的物联卡就是获取不到号码,然后就用了iccid,下面科普下iccid:
SIM卡正面或者背面总有那么几行数字和字母,20位的,这就是iccid。CCID:Integrate circuit card identity 集成电路卡识别码(固化在手机SIM卡中) ICCID为IC卡的唯一识别号码,共有20位数字组成,其编码格式为:XXXXXX 0MFSS YYGXX XXXXX。
前六位运营商代码:中国移动的为:898600;898602 ,中国联通的为:898601,中国电信898603。如果还想获取到更多的手机卡信息,可查看TelephonyManager的具体方法,这个就不在这里展开了。