2016-08-15 104 views
19

我有一個非常有趣的問題。Android內部麥克風發佈問題

我的印象是,當我的應用程序使用的麥克風,和Android系統進程(如來電或去電)需要麥克風,我的應用程序釋放它沒有任何考慮。

但我想這不是問題了,因爲我已經收到一些抱怨說,當正在使用的應用程序,並有來電,在電話的另一邊,也無法聽到他們。

有什麼辦法,以確保每次系統進程請求麥克風,被釋放?

+0

嘗試http://stackoverflow.com/questions/4194342/how-can-record-voice-and-record-call-in-android –

+0

Hi Pavneet。所以從我提供的鏈接上看到,只有某些地區的某些品牌不能解決這個問題。其餘的,自動請求麥克風和任何應用程序,它釋放它? –

+0

此外,我的問題是,由於我的應用程序不是錄音應用程序,有什麼方法可以確保應用程序將麥克風釋放到系統進程? –

回答

5

目前,沒有辦法檢查另一個應用程序是否請求麥克風。不過,也有一些解決方法:

  • 如果您記錄聲音在活動中,只需釋放onPause()麥克風,讓前臺應用程序可以使用它。如果您在後臺服務中錄製音頻,這將不起作用。
  • 有來電時暫停錄音。要檢測傳入(和傳出)呼叫,請查看this excellent answer。通話結束後,重新開始錄音。
  • 骯髒的黑客攻擊:如果檢測到傳入呼叫不夠,您可以遍歷所有正在運行的應用程序,並查看它們是否具有麥克風權限。只要帶有麥克風權限的應用程序正在運行,請暫停錄製。獲取所有正在運行的應用可能很困難欲瞭解更多信息,請看here,here,herehere for checking the permissions
+0

謝謝馬努。我的應用程序在後臺需要麥克風,因爲它甚至會嘗試識別音頻,當然如果用戶需要的話。至於來電和去電,我已經實施瞭解決方案,並且它已經過測試。至於骯髒的黑客,我試圖實現這樣的事情,因爲目前沒有其他選擇,正如我在想的是隻檢查在前臺的應用程序,如果它具有RECORD_AUDIO權限,我停止使用麥克風。但是,如果我在10-15秒的計時器上運行它,它會不會像這樣做太多的處理? –

+0

@BorceIvanovski我開發了一個simliar應用程序,它每2秒檢查一次所有正在運行的應用程序,並且不會耗盡太多電量。您可以進一步優化它,例如,如果屏幕關閉,您不必檢查正在運行的應用程序,等等...... – Manu

+0

好吧,我沒有想過那個部分,甚至進一步優化它。如果這不會耗盡電池每2秒,那可能會更好選擇。有誰知道任何示例如何獲取當前的前臺應用程序包名稱?由於我不需要查找正在運行的應用程序,因此我只需要查找哪個應用程序處於前臺,因爲無論它是否在運行,它都必須在前臺才能使用。 –

0

據我所知,沒有辦法知道麥克風的狀態忙,可用或如果有人請求它,因爲它在某種程度上這些系統來管理流程和資源,以便保持這種責任記住,你不能將麥克風永遠放在那裏,所以你無法控制它,這意味着你無法管理和檢測資源請求。以下有一些信息可能會對你有所幫助。

你可以試試是什麼,克服了所有的可能性時,系統可以使用麥克風像設置呼叫廣播的廣播接收器,當他們觸發釋放麥克風和通話時完成,那麼你可以再次獲取它。

+0

感謝Pavneet提供的信息。我並不是想要永遠保持麥克風,實際上我想達到相反的效果。每當有人要求麥克風時,將其釋放給他們。在亞洲的一些Android設備中,我遇到了一個問題,當應用程序正在工作時,傳入或傳出呼叫不會獲得麥克風,我認爲這是不可能的,因爲它們是系統進程。是的,我遵循這個方法,但是一些用戶可能會在後臺保留更長時間的應用程序,但仍然使用麥克風。 –

+0

所以這就是爲什麼我問這個問題,看看我是否可以優化應用程序,並在後臺和其他一些應用程序請求使用麥克風時釋放麥克風。或者確定系統進程何時要求發佈麥克風,這與我的應用程序在什麼階段無關。 –

0

在我來說,我創建了一個檢查輸入位從麥克風後臺線程。如果它們爲零(或數秒滯後),則應用程序會中斷該過程。然而,當然,這不是一個「好」的解決方案,但可能會有所幫助。

+0

謝謝維亞切斯拉夫,但這對我來說不會對這個問題有任何好處 –