2012-02-10 63 views
4

我的Android應用程序需要支持Android平臺2.1.x(即Android API級別7)。當我的應用程序開始播放媒體時,我需要使用​​和abandonAudioFocus()方法暫停其他應用程序(例如音樂),並在應用程序停止後繼續播放。Android API級別7中的requestAudioFocus是否有任何等效函數?

但是,這兩個功能僅適用於API級別8及以上。 API級別7的等效函數是什麼?或者在API級別8之前如何做到這一點?

+3

我找到了答案,在http://stackoverflow.com/questions/1993471/android-can-i-mute-currently-播放音頻的應用程序 – user1201995 2012-02-10 14:38:58

回答

1

感謝克里斯託弗(http://stackoverflow.com/questions/1993471/android-can-i-mute-currently-playing-audio-applications),我citating:

Android上的音頻處理是在一段時間內會變得非常糟糕。這些API非常奇怪,文檔記錄不完善,並且在版本之間不斷變化/不贊成/中斷。即使是AudioManager代碼也有FIXMEs。

無論如何,在Android(音樂,通知,電話等)中有幾種流類型,應用程序旨在選擇合適的播放類型。我想大多數Android應用程序應該使用音樂/媒體類型(STREAM_TYPE_MUSIC)。您可以使用setAudioStreamType方法在MediaPlayer上設置它。

SDK確實允許您將單個流類型設置爲獨奏 - 使所有其他流都被靜音 - 但我不相信您可以識別特定應用程序正在播放的音頻並以某種方式暫停/取消暫停它。一般情況下,音樂應用程序將使用PhoneStateListener在來電時暫停自己。

因此,對於您的情況,您可以爲您的MediaPlayer「借用」電話流並使用方法調用AudioManager.setStreamSolo(AudioManager.STREAM_VOICE_CALL ,true)開始播放,然後在播放或​​活動完成時取消單獨播放流。

我可以告訴你這是有效的,但我不記得你是否需要在使用語音呼叫流時也設置音頻模式爲MODE_IN_CALL(如:AudioManager.setMode(AudioManager.MODE_IN_CALL))。如果您發現這是必需的,那麼您需要確保您在播放完成後將模式返回到MODE_NORMAL,否則每當您按音量硬鍵時,都會顯示「通話音量」!但是,如果您確實想要更改回MODE_NORMAL,則必須檢查當時是否沒有發生真正的電話呼叫...

也許您可以使用其他流類型而不是語音呼叫,但我只是從使用揚聲器或聽筒進行音頻播放的應用程序開始工作,這需要使用語音通話流。

就像我說的,音頻的處理是不是特別開心...;)

相關問題