【问题标题】:Android: Control STREAM_ALARM volume with hardware keysAndroid:使用硬件键控制 STREAM_ALARM 音量
【发布时间】:2015-03-08 09:35:21
【问题描述】:

我正在尝试播放媒体类型为 STREAM_ALARM 的广播流,并使用硬件按钮更改其音量。

它必须是 STREAM_ALARM 因为它实际上是一个警报:即使插入耳机和/或手机设置为静音,它也应该通过扬声器播放。

我正在寻找一种始终有效的实现,无论用户处于什么活动中(因此它也应该在例如主屏幕中工作)。我知道我可以覆盖 onKeyUp/Down 但这只适用于我的活动)

这是我现在要做的(简化代码)

audioMgr.requestAudioFocus(
    afChangeListener, 
    AudioManager.STREAM_ALARM, 
    AudioManager.AUDIOFOCUS_GAIN
);

if (mp!=null) { mp.release(); mp = null;}
mp = new MediaPlayer();
mp.setDataSource(streamUrl);
mp.setAudioStreamType(AudioManager.STREAM_ALARM);
mp.setOnPreparedListener(onPreparedListener);
mp.prepareAsync();

然后当 onPreparedListener 触发时:

mp.start();

但是当我按下手机上的音量按钮时,它会改变媒体音量而不是闹钟(在 Android 4.4 和 5.0 上测试过)

Android 文档说明如下:

“默认情况下,按下音量控件会修改活动音频流的音量。”

来源:http://developer.android.com/training/managing-audio/volume-playback.html#HardwareVolumeKeys

所以我想问题是:我如何(正确)将 STREAM_ALARM 设置为活动音频流?

还是我做错了什么?

提前致谢!

更新:我已将其报告为 AOSP 错误跟踪器上的错误并已被接受.. 所以我想这实际上应该像我上面描述的那样工作,但它没有:S

链接:https://code.google.com/p/android/issues/detail?id=183843

【问题讨论】:

    标签: android android-mediaplayer


    【解决方案1】:

    回答我自己的问题:事实证明,Google 认为硬件音量按钮始终控制“您听到的内容”是完全有道理的,除非是警报。然后你必须进入应用程序并使用音量按钮:

    默认情况下,音量键从不控制警报流音量。他们在时钟应用程序中或在音量面板中的闹钟音量滑块处于活动状态时这样做。

    应用程序必须使用 ALARM 流调用 Activity.setVolumeControlStream() 以使音量键控制 ALARM 流的音量

    状态:按预期工作

    https://code.google.com/p/android/issues/detail?id=183843

    所以我没有做错任何事,Android 在使用音量按钮控制声音时表现不一致,这是设计使然。经过。设计。 :(

    【讨论】:

      【解决方案2】:

      覆盖 Activity 的 onKeyDown()。寻找正在按下的音量按钮。当它发生时,通过 setStreamVolume 设置一个新的卷。

      【讨论】:

      • 谢谢,但这仅在用户在我的应用程序中时有效。当用户在另一个应用程序、主屏幕等时,它也应该可以工作。
      • 那么我建议通过 MEDIA 流播放。你为什么要玩 ALARM?
      • 因为它是一个闹钟 :) 它应该始终通过扬声器播放,即使插入耳机或手机设置为静音。
      • (更新问题以更好地解释为什么我需要警报流:)
      【解决方案3】:

      如果用户在您的 Activity 中并使用硬件键添加:

          setVolumeControlStream(AudioManager.STREAM_ALARM);
      

      警报流将被控制。

      【讨论】:

      • 我知道,但正如您在 OP 中看到的那样,我正在寻找一种即使用户不在我的活动中也能正常工作的解决方案。实际上,如果 Android 能够“理解”正在播放警报流并且音量按钮应该控制它(但在我的情况下它默认为媒体流),我真的很喜欢。
      猜你喜欢
      • 2013-12-13
      • 1970-01-01
      • 1970-01-01
      • 2021-03-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-25
      • 1970-01-01
      相关资源
      最近更新 更多