2012-08-06 59 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