android 系統獲取通話狀態的方法
獲取電話通相關狀態方法及說明:
1>編寫一個監聽器類,該類繼承自PhoneStateListener:
重寫該類中的監聽方法:
classMyPhoneListener extends PhoneStateListener{
/**
* 當電話狀態改變了將會執行該方法
*/
@Override
publicvoid onCallStateChanged(int state, String incomingNumber) {
Log.i("info","incomingNumber:"+incomingNumber);
switch(state) {
caseTelephonyManager.CALL_STATE_IDLE:
Log.i("info","CALL_STATE_IDLE");
break;
caseTelephonyManager.CALL_STATE_OFFHOOK:
Log.i("info","CALL_STATE_OFFHOOK");
break;
caseTelephonyManager.CALL_STATE_RINGING:
Log.i("info","CALL_STATE_RINGING");
break;
}
}
}
2>建立並啟動監聽服務(需要執行如下程式碼才能監聽並執行監聽器中重寫的onCallStateChangerd方法);
TelephonyManagermanager = (TelephonyManager) getSystemService(TELEPHONY_SERVICE);
manager.listen(new MyPhotoListener(),PhoneStateListener.LISTEN_CALL_STATE
3>在清單檔案中註冊許可權。
android.permisison.READ_PHONE_STATE
/** Device call state: No activity. */
手機沒有發生通話行為,空閒狀態;
結束通話會觸發該事件。
public static final int CALL_STATE_IDLE= 0;
/** Device call state: Ringing. A new callarrived and is
* ringing or waiting. In the latter case, another call is
* already active. */
簡單翻譯一下:手機處於振鈴狀態。當有新的呼叫呼入或者呼叫等待時,觸發該事件。呼叫等待指的是當前已存在接通的通話(如果開通了呼叫等待業務,在有通話業務過程中,其他號碼呼入也會觸發該事件);
public static final int CALL_STATE_RINGING = 1;
/** Device call state: Off-hook. At least onecall exists
* that is dialing, active, or on hold,and no calls are ringing
* or waiting. */
這個要重點說一下,看有資料翻譯OFFHOOK是掛機,這個是錯誤的。掛機會直接執行CALL_STATE_IDLE。OFFHOOK是摘機,就是接電話。
原文翻譯:電話的(通話)狀態:摘機。至少存在一個撥號,接通,或者呼叫保持的業務,並且不存在其他呼叫的振鈴或者呼叫等待。
就是在撥號時、接電話時、接通處於呼叫等待中的來電時、都會觸發該事件。
publicstaticfinalintCALL_STATE_OFFHOOK = 2;