要获取SIM卡信息必须用到一个类:TelephonyManager,这个类用于访问有关设备上的电话服务信息。
1.获取TelephonyManager对象:
TelephonyManager tm=(TelephonyManager)Context.getSystemService(Context.TELEPHONY_SERVICE);
3. TelephonyManager包含的方法:
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 +跨国公司的注册网络运营商 。中国为460;电信03,移动02,联通GSM 01。所有移动卡返回是46002
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
AndroidManifest.xml
注意:
getLine1Number()只有部分SIM才能得到手机号码,这个是因为移动运营商没有把手机号码的数据写入到sim卡中.
移动神州行,联通的卡是可以取到的.动感地带的取不到.
如果我们要区分SIM卡的话,可以用SIM卡序列号区分:getSimSerialNumber()。
1.获取TelephonyManager对象:
TelephonyManager tm=(TelephonyManager)Context.getSystemService(Context.TELEPHONY_SERVICE);
2. 在文件 AndroidManifest.xml 中添加权限
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
3. TelephonyManager包含的方法:
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 +跨国公司的注册网络运营商 。中国为460;电信03,移动02,联通GSM 01。所有移动卡返回是46002
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
代码
MainActivity.java
public class MainActivity extends Activity {
private TelephonyManager tm;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toast.makeText(getApplicationContext(), "333333333", Toast.LENGTH_SHORT)
.show();
tm = (TelephonyManager) getApplicationContext().getSystemService(
Context.TELEPHONY_SERVICE);
Log.v("TAG", "DeviceId : " + tm.getDeviceId());
Log.v("TAG",
"DeviceSoftwareVersion : " + tm.getDeviceSoftwareVersion());
Log.v("TAG", "NetworkCountryIso : " + tm.getNetworkCountryIso());
Log.v("TAG", "NetworkOperator : " + tm.getNetworkOperator());
Log.v("TAG", "SimOperator : " + tm.getSimOperator());
Log.v("TAG", "SimOperatorName : " + tm.getSimOperatorName());
Log.v("TAG", "SimState : " + tm.getSimState() + "");
Log.v("TAG", "PhoneType : " + tm.getPhoneType() + "");
Log.v("TAG", "NetworkType : " + tm.getNetworkType() + "");
Log.v("TAG", "CellLocation : " + tm.getCellLocation() + "");
Log.v("TAG", "CallState : " + tm.getCallState() + "");
Log.v("TAG", "SimSerialNumber : " + tm.getSimSerialNumber() + "");
Log.v("TAG", "Line1Number : " + tm.getLine1Number() + "");
}
}
AndroidManifest.xml
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
注意:
getLine1Number()只有部分SIM才能得到手机号码,这个是因为移动运营商没有把手机号码的数据写入到sim卡中.
移动神州行,联通的卡是可以取到的.动感地带的取不到.
如果我们要区分SIM卡的话,可以用SIM卡序列号区分:getSimSerialNumber()。