TelephonyManager類詳解

TelephonyManager類主要提供了一系列用於訪問與手機通信相關的狀態和信息的get方法。其中包括手機SIM的狀態和信息、電信網絡的狀態及手機用戶的信息。 java

在應用程序中可使用這些get方法獲取相關數據。 android

TelephonyManager類的對象能夠經過Context.getSystemService(Context.TELEPHONY_SERVICE)方法來得到,須要注意的是有些通信信息的獲取對應用程序的權限有必定的限制,在開發的時候須要爲其添加相應的權限。 網絡

如下列出TelephonyManager類全部方法及說明: app

package com.ljq.activity;
import java.util.List;
import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.telephony.CellLocation;
import android.telephony.NeighboringCellInfo;
import android.telephony.TelephonyManager;
public class TelephonyManagerActivity extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        TelephonyManager tm = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
        /**
         * 返回電話狀態
         * 
         * CALL_STATE_IDLE 無任何狀態時 
         * CALL_STATE_OFFHOOK 接起電話時
         * CALL_STATE_RINGING 電話進來時 
         */
        tm.getCallState();
        //返回當前移動終端的位置
        CellLocation location=tm.getCellLocation();
        //請求位置更新,若是更新將產生廣播,接收對象爲註冊LISTEN_CELL_LOCATION的對象,須要的permission名稱爲ACCESS_COARSE_LOCATION。
        location.requestLocationUpdate();
        /**
         * 獲取數據活動狀態
         * 
         * DATA_ACTIVITY_IN 數據鏈接狀態:活動,正在接受數據
         * DATA_ACTIVITY_OUT 數據鏈接狀態:活動,正在發送數據
         * DATA_ACTIVITY_INOUT 數據鏈接狀態:活動,正在接受和發送數據
         * DATA_ACTIVITY_NONE 數據鏈接狀態:活動,但無數據發送和接受
         */
        tm.getDataActivity();
        /**
         * 獲取數據鏈接狀態
         * 
         * DATA_CONNECTED 數據鏈接狀態:已鏈接
         * DATA_CONNECTING 數據鏈接狀態:正在鏈接
         * DATA_DISCONNECTED 數據鏈接狀態:斷開
         * DATA_SUSPENDED 數據鏈接狀態:暫停
         */
        tm.getDataState();
        /**
         * 返回當前移動終端的惟一標識
         * 
         * 若是是GSM網絡,返回IMEI;若是是CDMA網絡,返回MEID
         */
        tm.getDeviceId();
        //返回移動終端的軟件版本,例如:GSM手機的IMEI/SV碼。
        tm.getDeviceSoftwareVersion();
        //返回手機號碼,對於GSM網絡來講即MSISDN
        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();
        tm.getSimOperatorName();
        //返回SIM卡的序列號(IMEI)
        tm.getSimSerialNumber();
        /**
         * 返回移動終端
         * 
         * 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();
        //返回用戶惟一標識,好比GSM網絡的IMSI編號
        tm.getSubscriberId();
        //獲取語音信箱號碼關聯的字母標識。 
        tm.getVoiceMailAlphaTag();
        //返回語音郵件號碼
        tm.getVoiceMailNumber();
        tm.hasIccCard();
        //返回手機是否處於漫遊狀態
        tm.isNetworkRoaming();
        // tm.listen(PhoneStateListener listener, int events) ;
        //解釋:
        //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
        //舉例,一個典型的IMSI號碼爲460030912121001
        //IMEI是International Mobile Equipment Identity (國際移動設備標識)的簡稱
        //IMEI由15位數字組成的」電子串號」,它與每臺手機一一對應,並且該碼是全世界惟一的
        //其組成爲:
        //1. 前6位數(TAC)是」型號覈准號碼」,通常表明機型
        //2. 接着的2位數(FAC)是」最後裝配號」,通常表明產地
        //3. 以後的6位數(SNR)是」串號」,通常表明生產順序號
        //4. 最後1位數(SP)一般是」0″,爲檢驗碼,目前暫備用
    }
}
相關文章
相關標籤/搜索