2012-08-06 79 views
3

我正在製作音樂應用程序,該應用程序包含在其他應用程序運行時播放音樂的服務。從Android上的服務設置音量控制流

爲了享受音樂和只有音樂,服務靜音所有其他應用程序。爲了做到這一點,靜音STREAM_MUSIC和播放音樂超過STREAM_VOICE_CALL(發現解決靜音其他應用here

由於服務使用STREAM_VOICE_CALL播放音樂,我想要找到一種方法使聲音播放時,音量按鈕可控制此流。

我已經嘗試過:

  • setVolumeControlStream:只能在活動
  • 捕獲音量鍵按下事件:服務沒有收到這樣的事件(source
  • audioManager.setMode(AudioManager.MODE_IN_CALL) :在我的情況下不起作用。此外,SDK documentation指出,此「模式只能在電話應用程序撥打電話時使用」。

在這一點上,我沒有選擇和任何幫助,將不勝感激。謝謝!

+0

你想玩什麼樣的聲音?通過耳機或通過揚聲器的東西?是否有理由需要使用STREAM_VOICE_CALL?你不能使用STREAM_MUSIC嗎? – Nick 2012-08-09 21:10:06

+0

該服務是音樂播放器的一部分,聲音是音樂。該服務還將STREAM_MUSIC設爲靜音,以便將其他應用設爲靜音,以便音樂不會與聲音混雜在一起,這就是爲什麼我使用另一個流。 – 2012-08-10 08:23:28

+1

通過選擇將所有其他應用程序靜音並強制自己使用其他應用程序流,您會讓自己陷入困境。用戶將無法檢測到事件是否發生,如果他們正在收聽只會播放聲音。就個人而言,我不想要這樣的解決方案。 – tolgap 2012-08-13 21:38:04

回答

3

我個人建議您不要STREAM_VOICE_CALL,因爲它與媒體播放相比建議用於語音呼叫。使用這可能會阻止您使用Android公開的功能進行媒體播放。

說到這個&考慮到您的使用情況,我認爲您需要尋找與'媒體音量'等級相比改變的'通話音量'等級。

查看股票音樂播放器應用中使用的MediaPlaybackService.java,並嘗試根據您的需求對其進行自定義。

+0

「我認爲你需要尋找與'媒體音量'等級相比改變的'通話音量'等級。」確實,這是我的問題的重點:-)。你有什麼想法我該怎麼做?我已經閱讀了音樂應用程序的代碼,但無法找到與此相關的任何內容。也許我錯過了它。 – 2012-08-14 15:14:50

1

我自己沒有嘗試過。但看起來應該工作。請嘗試一下。

m_audioManager = (AudioManager)getSystemService(Context.AUDIO_SERVICE); 
setVolumeControlStream(AudioManager.STREAM_VOICE_CALL); 
m_audioManager.setMode(AudioManager.MODE_IN_CALL); 
+0

我很感謝你正在努力幫助,但請閱讀之前的問題... – 2012-08-15 05:07:55