是否有一个监听器来监听android中的音量变化?

时间:2010-07-05 14:30:43

标签: android audio

是否可以注册一个监听器来监听Android中音乐流音量级别的变化?

我在SeekBar中显示实际音量,如果用户使用硬件音量键更改音量,我想更改搜索栏。此时显示正确的音量,直到用户使用硬件键更改音量。

5 个答案:

答案 0 :(得分:20)

这不是一个完美的答案,而是一个黑客:

android.media.VOLUME_CHANGED_ACTION

我在通过硬卷密钥更改音量时在本机日志中找到了上述操作。

01-25 16:11:24.015: DEBUG/VolumePanel(189): onVolumeChanged(streamType: 2, flags: 4)
01-25 16:11:24.015: DEBUG/BluetoothA2dpService(189): Received intent with action: android.media.VOLUME_CHANGED_ACTION

如果您没有任何其他解决方案,请继续并使用“android.media.VOLUME_CHANGED_ACTION”操作注册BroadcastReceiver。

其他做法是; Taking over the volume key on Android

答案 1 :(得分:5)

一种选择是使用registerMediaButtonEventReceiver并让您的应用程序处理硬件密钥。您可以在应用程序中调整音量搜索栏,并使用AudioManager调整音量。

另一种可能性是在您的应用中创建一个在后台运行的服务,并定期检查音量并相应地调整搜索栏。

答案 2 :(得分:0)

如果您的应用当前处于焦点,则可以通过从AudioManger访问当前音量来显示音量。否则,没有具体方法(使用api的官方方式)这样做。

答案 3 :(得分:0)

Android建议让系统通过调用setVolumeControlStream()为您完成所有这些操作。当用户尝试使用硬件按钮调整音量时,这将为您的应用程序正在使用的音频流调出一个音量搜索栏。

“你可能想尝试听音量键按下并以这种方式修改音频流的音量。抵制冲动.Android提供方便的setVolumeControlStream()方法,将音量键按下指向您指定的音频流

确定了应用程序将使用的音频流后,您应将其设置为卷流目标。您应该在应用程序的生命周期的早期进行此调用 - 因为您只需要在活动生命周期中调用一次,通常应该在onCreate()方法(控制媒体的Activity或Fragment)中调用它。这可以确保每当您的应用程序可见时,音量控制功能就像用户期望的那样。

setVolumeControlStream(AudioManager.STREAM_MUSIC);

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

来自:http://developer.android.com/training/managing-audio/volume-playback.html

答案 4 :(得分:0)

我遇到了类似的问题。 如果在视频播放期间媒体声音已关闭,应用程序应显示音量关闭指示器。这种方法也可以处理用户通过滑动更改媒体级别的情况。 因此,为 ContentObserver 编写了一个简单的 Rx 包装器,它可以直接观察媒体声音级别 ))

Gist link here