TelephonyManager類主要提供了一系列獲取手機與通訊相關的狀態和信息的get方法,包括手機用戶的信息、手機SIM的狀態、電信網絡的狀態等。
TelephonyManager類的對象的獲取:
TelephonyManager tm=(TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
在開發的時候不要忘記了在配置文件中為其添加相應的權限哦
<!--允許讀取電話狀態SIM的權限-->
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<!-- 這個權限用于進行網絡定位 -->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
以下簡單列出TelephonyManager類的一些方法
package com.xiaolijuan.getphoneinfo;
import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.telephony.NeighboringCellInfo;
import android.telephony.TelephonyManager;
import android.widget.TextView;
import java.util.List;
public class MainActivity extends Activity {
private TelephonyManager tm = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tm = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
TelephonyManager tm = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
/**
* 獲取當前設備的位置
*/
tm.getCellLocation().toString();
/**
* 獲取數據連接狀態
*
* DATA_CONNECTED 數據連接狀態:已連接
* DATA_CONNECTING 數據連接狀態:正在連接
* DATA_DISCONNECTED 數據連接狀態:斷開
* DATA_SUSPENDED 數據連接狀態:暫停
*/
tm.getDataState();
/**
* 返回唯一的設備ID
* 如果是GSM網絡,返回IMEI;如果是CDMA網絡,返回MEID;如果設備ID是不可用的返回null
*/
tm.getDeviceId();
/**
* 返回設備的軟件版本號
* 例如:GSM手機的IMEI/SV碼,如果軟件版本是返回null,如果不可用返回null
*/
tm.getDeviceSoftwareVersion();
/**
* 返回手機號碼
* 對于GSM網絡來說即MSISDN,如果不可用返回null
*/
tm.getLine1Number();
/**
* 返回當前設備附近設備的信息
*/
List<NeighboringCellInfo> infos = tm.getNeighboringCellInfo();
for (NeighboringCellInfo info : infos) {
//獲取鄰居小區號
int cid = info.getCid();
//獲取鄰居小區LAC,LAC: 位置區域碼。為了確定移動臺的位置,每個GSM/PLMN的覆蓋區都被劃分成許多位置區,LAC則用于標識不同的位置區。
info.getLac();
info.getNetworkType();
info.getPsc();
//獲取鄰居小區信號強度
info.getRssi();
}
/**
* 返回ISO標準的國家碼,即國際長途區號
*/
tm.getNetworkCountryIso();
/**
* 返回MCC+MNC代碼 (SIM卡運營商國家代碼和運營商網絡代碼)(IMSI)
*/
tm.getNetworkOperator();
/**
* 返回移動網絡運營商的名字(SPN)
*/
tm.getNetworkOperatorName();
/**
* 獲取網絡類型
*
* NETWORK_TYPE_CDMA 網絡類型為CDMA
* NETWORK_TYPE_EDGE 網絡類型為EDGE
* NETWORK_TYPE_EVDO_0 網絡類型為EVDO0
* NETWORK_TYPE_EVDO_A 網絡類型為EVDOA
* NETWORK_TYPE_GPRS 網絡類型為GPRS
* NETWORK_TYPE_HSDPA 網絡類型為HSDPA
* NETWORK_TYPE_HSPA 網絡類型為HSPA
* NETWORK_TYPE_HSUPA 網絡類型為HSUPA
* NETWORK_TYPE_UMTS 網絡類型為UMTS
*
* 在中國,聯通的3G為UMTS或HSDPA,移動和聯通的2G為GPRS或EGDE,電信的2G為CDMA,電信的3G為EVDO
*/
tm.getNetworkType();
/**
* 返回設備的類型
*
* PHONE_TYPE_CDMA 手機制式為CDMA,電信
* PHONE_TYPE_GSM 手機制式為GSM,移動和聯通
* PHONE_TYPE_NONE 手機制式未知
*/
tm.getPhoneType();
/**
* 返回SIM卡提供商的國家代碼
*/
tm.getSimCountryIso();
/**
* 返回MCC+MNC代碼 (SIM卡運營商國家代碼和運營商網絡代碼)(IMSI)
*/
tm.getSimOperator();
/**
* 返回服務提供者的名稱(SPN)
*/
tm.getSimOperatorName();
/**
* 返回SIM卡的序列號(IMEI),如果是返回null為不可用。
*/
tm.getSimSerialNumber();
/**
* 返回一個常數表示默認的SIM卡的狀態。
*
* SIM_STATE_ABSENT SIM卡未找到
* SIM_STATE_NETWORK_LOCKED SIM卡網絡被鎖定,需要Network PIN解鎖
* SIM_STATE_PIN_REQUIRED SIM卡PIN被鎖定,需要User PIN解鎖
* SIM_STATE_PUK_REQUIRED SIM卡PUK被鎖定,需要User PUK解鎖
* SIM_STATE_READY SIM卡可用
* SIM_STATE_UNKNOWN SIM卡未知
*/
tm.getSimState();
/**
* 返回唯一的用戶ID,例如,IMSI為GSM手機。
*/
tm.getSubscriberId();
/**
* 獲取語音信箱號碼關聯的字母標識
*/
tm.getVoiceMailAlphaTag();
/**
* 返回語音郵件號碼
*/
tm.getVoiceMailNumber();
/**
* 返回手機是否處于漫游狀態
*/
tm.isNetworkRoaming();
((TextView) findViewById(R.id.tv_info)).setText(getInfo());
}
public String getInfo() {
String info = "獲取設備編號: " + tm.getDeviceId();
info += "\n獲取SIM卡提供商的國家代碼: " + tm.getSimCountryIso();
info += "\n獲取SIM卡序列號: " + tm.getSimSerialNumber();
info += "\n獲取網絡運營商代號: " + tm.getNetworkOperator();
info += "\n獲取網絡運營商名稱: " + tm.getNetworkOperatorName();
info += "\n獲取設備當前位置: " + tm.getCellLocation();
info += "\n獲取手機類型: " + tm.getPhoneType();
info += "\n手機號碼: " + tm.getLine1Number();
info += "\n國際長途區號: " + tm.getNetworkCountryIso();
info += "\n獲取網絡類型: " + tm.getNetworkType();
info += "\n獲取數據連接狀態: " + tm.getDataState();
return info;
}
}
下面一些解釋:
(1)IMSI是國際移動用戶識別碼的簡稱(International Mobile Subscriber Identity)
IMSI共有15位,其結構如下:
MCC+MNC+MIN
MCC:Mobile Country Code,移動國家碼,共3位,中國為460;
MNC:Mobile NetworkCode,移動網絡碼,共2位
在中國,移動的代碼為電00和02,聯通的代碼為01,電信的代碼為03
合起來就是(也是Android手機中APN配置文件中的代碼):
中國移動:46000 46002
中國聯通:46001
中國電信:46003
(2)IMEI是International Mobile Equipment Identity (國際移動設備標識)的簡稱
IMEI由15位數字組成的”電子串號”,它與每臺手機一一對應,而且該碼是全世界唯一的
其組成為:
1. 前6位數(TAC)是”型號核準號碼”,一般代表機型
2. 接著的2位數(FAC)是”最后裝配號”,一般代表產地
3. 之后的6位數(SNR)是”串號”,一般代表生產順序號
4. 最后1位數(SP)通常是”0″,為檢驗碼,目前暫備用
參考:http://www.cnblogs.com/linjiqin/archive/2011/02/26/1965682.html