2014-09-05 46 views
10

我的應用程序中有一個錄音服務,它將不斷錄製聲音。所以它會一直佔用AudioRecord。這意味着沒有其他應用程序可以使用錄音機,因爲它已被服務佔用。有什麼方法可以通知其他應用程序正在請求錄音機(以便我可以釋放它)以及應用程序何時發佈它(以便我可以將其分配回服務)?當其他應用程序請求錄製時發佈AudioRecord android

+0

我認爲這是不常見的senario,所以我想沒有辦法做到這一點。 – rekire 2014-09-18 09:34:05

+0

@rekire即使服務正在運行,設備的呼叫功能也會自動使用麥克風。所以,我想一定有辦法。 – berserk 2014-09-18 09:36:32

+0

我認爲它使用較低的本地API,它不適用於任何應用程序。 – rekire 2014-09-18 09:43:09

回答

1

也許一種可能的方法是創建一個BroadcastReceiver,它從請求控制麥克風源的應用接收事件。方法onReceive()應與服務交互並釋放資源。當其他應用程序正在完成時,它可以恢復進程以再次啓動服務。如果您無法控制請求應用程序的行爲,我認爲存在一個稍微不同的問題。無論如何:

問題是知道何時資源被請求,這可以通過AudioManager意向類型完成。 一定要檢查Managing audio focus哪些談論TRANSIENT方式的音頻聚焦損失!

+0

感謝您的回答!我會試一試:) – berserk 2014-09-23 11:17:08

+0

我讀了AudioManager類,但沒有可用於Mic的廣播。有一些標誌,而我認爲不能用於我的情況。 – berserk 2014-09-25 06:59:13

1

正如@Rekire提到的那樣,可能沒有辦法做到這一點。此外,AudioManager不提供此類廣播,因此不適用於不同的應用程序。也許根植設備是唯一的選擇。

+0

嗯..猜我沒有別的選擇! – berserk 2014-09-25 08:00:22

+0

那麼「Auto-Shazam」如何工作呢? – HaydenKai 2017-03-02 10:05:25

0

這可以通過AudioManager.OnAudioFocusChangeListener回調完成。只需在AUDIOFOCUS_LOSS_TRANSIENT事件中停止錄製,然後再次開始AUDIOFOCUS_GAIN事件。 此解決方案適用於Google語音搜索(Google搜索小部件,Google Chrome等)。

但不幸的是,它對其他普通應用程序效果不佳(例如HTC M7 Voice Recorder應用程序無法在第一次單擊「錄製」按鈕時開始錄製,第二次點擊做竅門 - 似乎應用程序應該準備好重試多次錄製失敗)。

+0

謝謝,會檢查。 – berserk 2015-05-21 10:53:26

相關問題