2013-02-20 52 views
0

我正在使用PhoneStateListener,因此當用戶接到呼叫或開始呼叫時,揚聲器將立即打開。使用PhoneStateListener設置揚聲器

PhoneStateListener phoneStateListener = new PhoneStateListener() 
    { 
     @Override 
     public void onCallStateChanged(int state, String incomingNumber) 
     { 
      if (state == TelephonyManager.CALL_STATE_RINGING) 
      { 


      } else if(state == TelephonyManager.CALL_STATE_IDLE) 
      { 

       AudioManager audioManager = (AudioManager)getSystemService(Context.AUDIO_SERVICE); 

       audioManager.setSpeakerphoneOn(false); 

      } else if(state == TelephonyManager.CALL_STATE_OFFHOOK) 
      { 

       AudioManager audioManager = (AudioManager)getSystemService(Context.AUDIO_SERVICE); 
       audioManager.setSpeakerphoneOn(true); 
      } 
      super.onCallStateChanged(state, incomingNumber); 
     } 
    }; 

    TelephonyManager mgr = (TelephonyManager) getSystemService(TELEPHONY_SERVICE); 

    if(mgr != null) 
    { 
     mgr.listen(phoneStateListener, PhoneStateListener.LISTEN_CALL_STATE); 
    } 

這是我使用的代碼。它工作得很好,直到我已經安裝果凍豆,現在我注意到它只在用戶接到呼叫時設置揚聲器,但如果他開始呼叫,它什麼也不做

+0

奇怪的是,狀態應該是OFFHOOK,當手機在另一邊響鈴時(當撥打電話) – Timmetje 2013-02-20 15:39:19

回答

1

找到它。

TelephonyManager似乎只適用於傳入呼叫。

對於傳出調用,爲IntentFilter創建一個意圖爲android.intent.action.NEW_OUTGOING_CALL字符串參數的廣播監聽器,並且不要忘記將AndroidMenifest中的權限授予PROCESS_OUTGOING_CALLS。這將工作。每當有傳出呼叫時,onReceive將在廣播監聽器中被調用。

+0

嗯,你能幫助我請即時通訊新的Java和Android開發。 如何製作廣播監聽器? – Raz 2013-02-20 16:28:51

+0

它說 02-20 18:36:36.164:E/AndroidRuntime(19345):引起:java.lang.SecurityException:權限拒絕:不允許從pid = 19345發送廣播android.intent.action.NEW_OUTGOING_CALL,uid = 10183 – Raz 2013-02-20 16:38:30

+0

您需要權限,在這種情況下將它放在您的清單中。這個問題也得到了回答,它並不意味着讓你問自己每一點,因爲你不太瞭解Java。嘗試閱讀Android開發網站。還搜索SO以獲得有關廣播監聽者的答案。很多答案已經存在。例如http://stackoverflow.com/questions/13134331/cannot-detect-when-outgoing-call-is-answered-in-android。 – Timmetje 2013-02-20 16:46:00