【问题标题】:Set the volume control stream from a service on Android从 Android 上的服务设置音量控制流
【发布时间】:2012-08-06 19:26:22
【问题描述】:

我正在开发一个音乐应用程序,该应用程序包含在其他应用程序运行时播放音乐的服务。

为了只欣赏音乐,服务会静音所有其他应用程序。为此,它将 STREAM_MUSIC 静音并通过 STREAM_VOICE_CALL 播放音乐(找到了静音其他应用程序的解决方案here

由于服务使用 STREAM_VOICE_CALL 播放音乐,我试图找到一种在播放声音时让音量按钮控制此流的方法。

我已经尝试过的:

  • setVolumeControlStream: 只适用于活动
  • 捕获音量键按下事件:服务未收到此类事件 (source)
  • audioManager.setMode(AudioManager.MODE_IN_CALL) :在我的情况下不起作用。另外,SDK documentation 声明“这种模式只能由电话应用程序在拨打电话时使用”。

在这一点上,我没有选择,任何帮助将不胜感激。谢谢!

【问题讨论】:

  • 你想播放什么样的声音?通过听筒或通过扬声器的东西?您是否有理由需要使用 STREAM_VOICE_CALL?你不能用STREAM_MUSIC吗?
  • 服务是音乐播放器的一部分,声音就是音乐。该服务还将STREAM_MUSIC静音,以使其他应用程序静音,以免音乐与声音混在一起,这就是我使用另一个流的原因。
  • 通过选择静音所有其他应用程序并强迫自己使用另一个流,你让事情对自己来说太难了。用户将无法检测是否发生了仅在他们正在收听时才播放声音的事件。就个人而言,我不想要这样的解决方案。
  • 如果我将每个流静音,我会同意你的。但唯一静音的流是 STREAM_MUSIC,因此仍然可以听到通知。

标签: android service android-service android-audiomanager


【解决方案1】:

我个人不建议您使用STREAM_VOICE_CALL,因为与媒体播放相比,建议将其用于语音通话。使用它可能会阻止您使用 Android 公开的功能进行媒体播放。

话虽如此并考虑到您的用例,我认为您需要寻找与“媒体音量”级别相比变化的“通话量”级别。

查看股票音乐播放器应用中使用的MediaPlaybackService.java,并尝试根据您的需要对其进行自定义。

【讨论】:

  • “我认为您需要寻找与“媒体音量”级别相比变化的“通话音量”级别。”没错,这就是我的问题的重点:-)。你知道我该怎么做吗?我已经阅读了音乐应用程序的代码,但找不到与此相关的任何内容。也许我错过了。
【解决方案2】:

我自己没试过。但看起来它应该工作。请尝试一下。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-04-11
    • 2012-11-06
    • 1970-01-01
    • 2019-05-13
    • 2018-01-18
    • 2011-05-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多