加入权限:<uses-permission android:name="android.permission.READ_PHONE_STATE" />
1 package com.example.textphone; 2 3 import android.content.Context; 4 import android.telephony.TelephonyManager; 5 6 public class SIMCardInfo { 7 /** 8 * TelephonyManager提供设备上获取通讯服务信息的入口。 应用程序可以使用这个类方法确定的电信服务商和国家 以及某些类型的用户访问信息。 9 * 应用程序也可以注册一个监听器到电话收状态的变化。不需要直接实例化这个类 10 * 使用Context.getSystemService(Context.TELEPHONY_SERVICE)来获取这个类的实例。 11 */ 12 private TelephonyManager telephonyManager; 13 /** 14 * 国际移动用户识别码 15 */ 16 private String IMSI; 17 18 public SIMCardInfo(Context context) { 19 telephonyManager = (TelephonyManager) context 20 .getSystemService(Context.TELEPHONY_SERVICE); 21 } 22 23 /** 24 * Role:获取当前设置的电话号码 <BR> 25 * Date:2012-3-12 <BR> 26 * 这个目前是得不到的,因为移动策略问题 27 */ 28 public String getNativePhoneNumber() { 29 String NativePhoneNumber = ""; 30 NativePhoneNumber = telephonyManager.getLine1Number(); 31 return NativePhoneNumber; 32 } 33 34 /** 35 * Role:Telecom service providers获取手机服务商信息 <BR> 36 * 需要加入权限<uses-permission 37 * android:name="android.permission.READ_PHONE_STATE"/> <BR> 38 */ 39 public String getProvidersName() { 40 String ProvidersName = null; 41 // 返回唯一的用户ID;就是这张卡的编号神马的 42 IMSI = telephonyManager.getSubscriberId(); 43 // IMSI号前面3位460是国家,紧接着后面2位00 02是中国移动,01是中国联通,03是中国电信。 44 // Log.i("tag",IMSI); 45 if(IMSI == null || "".equals(IMSI)){ 46 ProvidersName = "获取手机号码失败"; 47 }else 48 if (IMSI.startsWith("46000") || IMSI.startsWith("46002")) { 49 ProvidersName = "中国移动"; 50 } else if (IMSI.startsWith("46001")) { 51 ProvidersName = "中国联通"; 52 } else if (IMSI.startsWith("46003")) { 53 ProvidersName = "中国电信"; 54 } 55 return ProvidersName; 56 } 57 58 }
然后在事件中调用如下:
1 SIMCardInfo siminfo = new SIMCardInfo(MainActivity.this); 2 if (v == button_getSIMInfo && siminfo != null) { 3 Log.i("tag", "~~~~服务商~~~~" + siminfo.getProvidersName()); 4 // Log.i("tag", "~~~~~号码~~~~~" + siminfo.getNativePhoneNumber()); 5 // number.setText(siminfo.getNativePhoneNumber()); 6 privoid.setText(siminfo.getProvidersName()); 7 } else { 8 Toast.makeText(MainActivity.this, "数据获取失败!", Toast.LENGTH_LONG).show(); 9 }
功能 说明
getCellLocation() 返回的单元格位置的装置 ACCESS_COARSE_LOCATION或ACCESS_FINE_LOCATION
getDeviceId() 返回的IMEI / MEID的设备。 如果该设备是GSM设备然后IMEI号将被退回,如果该设备是一个CDMA设备然后MEID 将被退回 READ_PHONE_STATE
getLine1Number() 返回设备的电话号码(MSISDN号码) READ_PHONE_STATE
getNetworkOperatorName() 返回注册的网络运营商的名字
getNetworkOperator() 返回的MCC +跨国公司的注册网络运营商
getNetworkCountryIso() 返回注册的网络运营商的国家代码
getSimCountryIso() 返回SIM卡运营商的国家代码 READ_PHONE_STATE
getSimOperator() 返回SIM卡运营商的单个核细胞数+冶 READ_PHONE_STATE
getSimOperatorName() 返回SIM卡运营商的名字 READ_PHONE_STATE
getSimSerialNumber() 返回SIM卡的序列号 READ_PHONE_STATE
getNetworkType() 返回网络设备可用的类型。 这将是下列其中一个值:
TelephonyManager.NETWORK_TYPE_UNKNOWN
TelephonyManager.NETWORK_TYPE_GPRS
TelephonyManager.NETWORK_TYPE_EDGE
TelephonyManager.NETWORK_TYPE_UMTS READ_PHONE_STATE
getPhoneType() 返回设备的类型。
这将是以下值之一:
TelephonyManager.PHONE_TYPE_NONE
TelephonyManager.PHONE_TYPE_GSM
TelephonyManager.PHONE_TYPE_CDMA READ_PHONE_STATE
getSubscriberId() 返回用户识别码(的IMSI)的设备 READ_PHONE_STATE
getNeighboringCellInfo() 返回NeighboringCellInfo类代表名单相邻小区的信息,如果可用,否则将返回null ACCESS_COARSE_UPDATES