1. 程式人生 > >android 系統獲取通話狀態的方法

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;