14

我有一个适用于三星平板电脑的 Android 应用程序,它使用从平板电脑耳机插孔获取电源的外部设备。当外部设备开机时(通过以编程方式将音量调到最大),Android 会短暂显示一个警告弹出窗口,上面写着:“如果你听太久,大声的音乐可能会损害你的听力……”我不希望该消息被显示。

这是有问题的代码行:

mAudioMgr.setStreamVolume(AudioManager.STREAM_MUSIC, mAudioMgr.getStreamMaxVolume(AudioManager.STREAM_MUSIC), 0);

不能只将其调到一半。事实上,即使音量设置低于最大设置,我也看到平板电脑显示警告(手动更改音量时)。

是的,我录制了原始音量,并在我们使用完外部设备后恢复它。

感谢您的任何建议。

4

3 回答 3

2

由于您无法禁用系统消息,并且当用户手动降低音量时也会遇到问题,因此我建议您进行一系列控制以帮助解决此问题。最大化音量:

public void maxVolume() {
    AudioManager audioManager = (AudioManager)context.getSystemService(this.AUDIO_SERVICE);
    while ( audioManager.getStreamVolume(AudioManager.STREAM_MUSIC) < audioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC)) {
        audioManager.adjustStreamVolume(AudioManager.STREAM_MUSIC, AudioManager.ADJUST_RAISE, 0);
    }
}

要防止用户手动更改音量:

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if ((keyCode == KeyEvent.KEYCODE_VOLUME_DOWN) 
         || (keyCode == KeyEvent.KEYCODE_VOLUME_UP) 
         || (keyCode == KeyEvent.KEYCODE_VOLUME_MUTE)) {
        return true;
    }
    return super.onKeyDown(keyCode, event);
}

您可以在 onCreate 方法中调用 maxVolume(),然后在开始使用插孔输出过程之前调用它,以确保系统没有更改您的音量。或者,您可以注册一个监听器来监听音量变化,将 maxVolume() 设为静态并从监听器调用它。希望它可以帮助你!

于 2014-04-02T22:19:44.747 回答
1

我知道这个问题已经很老了,但我自己也遇到了这个问题。我想我会用我发现的内容添加到给出的答案中,以防它帮助其他人发生这种情况。

这里的一篇帖子提到警告不在 AOSP 中,但事实并非如此。请在此处参考 VolumePanel::SafetyWarning 类:VolumePanel::SafetyWarning

仔细阅读 SafetyWarning 类后,您会注意到 AudioManager 类中有一个名为disableSafeMediaVolume的隐藏方法。您可以通过反射轻松调用此隐藏方法,但如果这样做,您将获得安全异常,因为它需要系统权限“android.permission.STATUS_BAR_SERVICE”。

所以......话虽如此,据我所知,除非您拥有此系统权限,否则无法以编程方式抑制对话框。

在产品管理的支持下,我们最终将音量设置缓存在 SharedPreferences 中,然后在应用程序启动时将其从缓存中重置。如果它恰好高于警告对话框的阈值,则将显示警告,用户只需按 OK 即可获得他们想要的音量设置,但至少他们不必自己手动重置音量.

关于为什么有些人看不到此对话框的其他一些说明。只有当您将耳机(或耳塞或有线耳机)插入设备并尝试将媒体音量流设置为某个阈值(在三星 Galaxy Tab A 上此阈值为 60%)时,您才会看到它。如果您在对话框中按 OK,那么它将不会再次显示,除非您重新启动设备或拔下耳机并重新插入(音量设置为或高于阈值)。

希望这可以帮助某人。

于 2016-01-21T15:39:33.373 回答
0

我不知道您是否可以考虑这么多的答案,但我很确定您无法删除该消息,因为它由系统自动显示,而不是您可以访问的内容。我的三星 Galaxy S3 做同样的事情。

同样从我在网上看到的内容来看,一些安卓设备在你放入千斤顶时也会降低音量,这样“你不会伤害你的听力”。

您可以通过在之前或之后显示您自己的通知来覆盖通知吗?通知只是一个标准Toast

于 2013-02-20T08:59:37.477 回答