2016-02-25 121 views
3

我一直在尋找幾天,並沒有找到合適的解決方案。如何檢查麥克風是否被任何背景應用程序使用

我想檢查是否有任何應用程序在後臺使用麥克風,所以我的應用程序可以使用它,否則我只想顯示消息「麥克風正在使用另一個應用程序」。

我試着檢查所有的應用程序在後臺和他們的權限,但這並不能解決我的問題,因爲有包wearable.app要求的權限,但它不影響音頻,或它沒有使用它。

我嘗試了其他的解決方案,我可以在這裏或谷歌找到,但沒有一個似乎是正確的方法。

所有我想檢查,如果麥克風沒有被使用,所以我的應用程序可以使用它。

任何建議,我將不勝感激。

回答

11

搜索更多後,我找到了解決方案,我將它添加到任何需要它來找到它更容易的人。

private boolean validateMicAvailability(){ 
    Boolean available = true; 
    AudioRecord recorder = 
      new AudioRecord(MediaRecorder.AudioSource.MIC, 44100, 
        AudioFormat.CHANNEL_IN_MONO, 
        AudioFormat.ENCODING_DEFAULT, 44100); 
    try{ 
     if(recorder.getRecordingState() != AudioRecord.RECORDSTATE_STOPPED){ 
      available = false; 

     } 

     recorder.startRecording(); 
     if(recorder.getRecordingState() != AudioRecord.RECORDSTATE_RECORDING){ 
      recorder.stop(); 
      available = false; 

     } 
     recorder.stop(); 
    } finally{ 
     recorder.release(); 
     recorder = null; 
    } 

    return available; 
} 
+0

真棒解決方法 – Qasim

+0

greate解決方法,但我想知道如果這也可以使用OpenSLES檢測。 Atm我的OpenSLES音頻回調沒有被觸發,以防麥克風不可用。 – user2479595

0

你可以反過來做。

在您的應用中獲取麥克風。

獲取已安裝應用程序的列表,這些應用程序擁有RECORD權限。

然後檢查這些應用程序中的一個是否在前臺,以及是否有一個釋放麥克風,以便其他應用程序可以使用它(例如發生電話呼叫時)。

有點骯髒的做法,但我認爲這是你在找什麼。

乾杯!

+0

是的,但這並不能解決我的問題。 可以說有一個應用程序在我的開始之前在後臺錄製音頻。用戶啓動我的應用程序,我不能從該應用程序中取出麥克風,除非他們已經實現了廣播接收器來釋放麥克風(我認爲這很少)。所以,當我的應用程序嘗試啓動麥克風時,它會卡住或崩潰,因爲它不能使用麥克風,因爲其他應用程序已經使用它來錄製音頻。 –

+0

但是沒有這樣的應用程序。如果應用程序使用麥克風等硬件資源,並且不會釋放其他應用程序來使用它,則手機甚至不會撥打電話。所以除非你想讓麥克風全天候開放,否則你可以檢查你想要捕捉的時間,如果其他應用程序正在使用它。如果它確實推遲了音頻捕獲時間。 –

+0

但這就是問題所在,我試圖在我的應用中獲取麥克風,但它並未從其他應用發佈,因此我的應用被卡住或崩潰。 我相信它與系統進程完全不同,它們總是可以從後臺運行的任何應用程序獲取資源。所以除非我錯過了一些東西,這不符合你所說的「把麥克風放到你的應用程序中」。我想要做的與shazam相同,當應用程序打開並且使用麥克風的背景中的另一個應用程序未發佈時,它會給出消息「正在使用麥克風」。我正在嘗試做同樣的工作 –

相關問題