2012-08-06 112 views
0

我正在研究一個應用程序,它允許用戶採取語音筆記。爲此,我使用AudioRecorder不斷從麥克風獲取音頻數據並將其處理爲MP3。AudioRecorder塊麥克風

這一切都很好,直到最近我發現,如果我的應用程序在後臺運行時收到/撥打電話,對方無法聽到我的聲音。點擊撥號器屏幕上的靜音/取消靜音按鈕不會做任何事情 - 麥克風似乎被禁用,直到我停止我的應用程序。

現在的問題是我該如何處理這種情況?我的唯一選擇是在語音通話開始後發佈AudioRecorder嗎?如果AudioRecorder在通話過程中只是跳過麥克風的音頻數據,我完全可以確定,但用戶可以通過應用程序進行通信的情況是不可接受的。

謝謝,

回答

0

只有1個應用程序可以在任何給定的時間使用麥克風。您可能需要使用PhoneStateListener,以便在電話響鈴或摘機時釋放記錄器。

+0

你知道,我在運行Android 4.1的Nexus S上看不到問題,但是我的HTC Sensation在Android 2.3.3上確實遭受了這個問題。所以我想知道如果問題是HTC或Android版本特定 – Anton 2012-08-06 21:38:29

+0

區別可能是某些設備實現強制關閉您的應用程序訪問麥克風。 – 2012-08-06 21:40:13

+0

不,應用程序高興地在後臺運行 – Anton 2012-08-06 21:44:39

0

您可以使用PHONE_STATE操作攔截來電,作爲BroadcastReceiver的一部分。然後,在你接收你的onReceive功能,你會檢查手機的狀態:

public void onReceive(Context context, Intent intent) { 

    String state = intent.getStringExtra(TelephonyManager.EXTRA_STATE); 

    if(state.equals(TelephonyManager.EXTRA_STATE_RINGING)){ 
     //Phone is ringing 

    }else if(state.equals(TelephonyManager.EXTRA_STATE_OFFHOOK){ 
     //Call received 


    }else if (state.equals(TelephonyManager.EXTRA_STATE_IDLE)){ 
     //Call Dropped or rejected 

    } 

} 

不要忘記添加在您的清單中neccessary權限。

同樣,您也可以截取外撥電話。 Here是一個很好的教程,解釋如何做到這一點。

其餘的是關於停止和恢復記錄器取決於你攔截什麼。