【问题标题】:Android Play Sound even if Media Volume is 0即使媒体音量为 0,Android 也会播放声音
【发布时间】:2014-03-14 16:07:55
【问题描述】:

即使设备的媒体音量为 0,我也想用 AudioTrack 播放音乐。 在我的应用程序中,我希望有一个用于媒体音量的 SeekBar(也许如果其他音乐在后台运行)和一个用于我的应用程序音乐的 SeekBar。

到目前为止,我可以更改媒体音量。但随后我的应用程序的音乐也是无声的..

我该怎么做?

【问题讨论】:

  • 不知道你能不能区分这样的媒体卷。可以肯定的是,操作系统默认没有特定于应用程序的音量控制。您可以尝试跟踪应用程序流或其他内容,但很难涵盖所有情况。
  • 听起来你想忽略用户设置的音量偏好。我认为这不是一个好的用户体验决定。

标签: android media volume audiotrack


【解决方案1】:

我认为 Android 中有六种不同的声音流可以播放不同类型的声音

创建可预测的音频体验的第一步是了解您的应用将使用哪个音频流。

Android 维护一个单独的音频流用于播放 音乐, 警报, 通知, 来电铃声, 系统声音, 通话量, 和 DTMF 音。 这样做主要是为了让用户能够独立控制每个流的音量。

使用硬件音量键控制应用的音量

默认情况下,按下音量控件会修改活动音频流的音量。如果您的应用当前没有播放任何内容,则按音量键可调整铃声音量。

如果您有一个游戏或音乐应用,那么当用户按下音量键时,他们很可能想要控制游戏或音乐的音量,即使他们当前处于歌曲之间或没有音乐在当前游戏位置。

您可能很想尝试聆听音量键按下并以这种方式修改音频流的音量。忍住冲动。 Android 提供了方便的 setVolumeControlStream() 方法来将音量键按下定向到您指定的音频流。

确定您的应用程序将使用的音频流后,您应该将其设置为音量流目标。您应该在应用程序生命周期的早期进行此调用——因为您只需要在 Activity 生命周期中调用它一次,因此您通常应该在 onCreate() 方法(控制您的媒体的 Activity 或 Fragment 的)中调用它。这可确保无论何时您的应用可见,音量控制功能都符合用户的预期。

setVolumeControlStream(AudioManager.STREAM_MUSIC);

从此时起,只要目标活动或片段可见,按下设备上的音量键就会影响您指定的音频流(在本例中为“音乐”)。

【讨论】:

  • 这比我的评论要好得多。我看到的唯一可能出现的问题是,如果您想要静音的流与您想要打开的流或其他东西重合。例如,您不能在“音乐”流上运行两个不同的音轨吗?
【解决方案2】:

感谢您的回答。

现在我使用“AudioTrack(AudioManager.STREAM_SYSTEM, (...))”,它运行良好。 也许这不是最好的方法,但到目前为止,它正在发挥作用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多