我有一个用于三星平板电脑的Android应用程序,它使用外部设备从平板电脑耳机插孔获取电源。当外部设备通电时(通过以编程方式最大化音量),Android会短暂显示一个警告弹出窗口:“如果您长时间聆听,大声的音乐可能会损害您的听力......”我希望此消息不会显示。
这是令人讨厌的代码行:
mAudioMgr.setStreamVolume(AudioManager.STREAM_MUSIC, mAudioMgr.getStreamMaxVolume(AudioManager.STREAM_MUSIC), 0);
这不是一个只能中途打开的选项。事实上,我已经看到平板电脑显示警告(手动更改音量时),即使音量设置低于最大设置。
是的,我记录了原始音量,并在我们完成外部设备后恢复它。
感谢您的任何建议。
答案 0 :(得分:1)
由于您无法禁用系统消息,并且当用户手动降低音量时您也会遇到问题,我建议您执行一系列控制,这将有助于此。 要最大化音量:
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()静态并从侦听器调用它。希望它可以帮助你!
答案 1 :(得分:1)
我知道这个问题很老了,但我自己也遇到了这个问题。我想我会在我发现的情况下添加答案,以防其他人发生这种情况。
这里的一个帖子提到警告不在AOSP中,但事实并非如此。请在此处参考VolumePanel :: SafteyWarning课程:VolumePanel::SafetyWarning
一旦您仔细阅读了SafetyWarning类,您会注意到AudioManager类中有一个名为 disableSafeMediaVolume 的隐藏方法。您可以通过反射轻松地调用此隐藏方法,但如果您这样做,那么您将获得安全异常,因为它需要系统权限&#34; android.permission.STATUS_BAR_SERVICE&#34;。
所以......据说,除非你拥有这个系统权限,否则无法以编程方式禁止对话框。
我们最后在产品管理的祝福中做的是我们在SharedPreferences中缓存卷设置,然后在应用程序启动时从缓存中重置它。如果它恰好高于警告对话框的阈值,那么将显示警告,用户只需按OK即可获得他们想要的音量设置,但至少他们不必手动重置音量本身。
关于为什么有些人看不到此对话框的其他几点说明。只有当您将耳机(或耳塞或有线耳机)插入设备并且您尝试将媒体音量流设置为超过某个阈值时才会看到它(在Samsung Galaxy Tab A上,此阈值为60%)。如果在对话框中按OK,则除非您重新启动设备或拔下耳机并将其重新插入(音量设置为阈值或高于阈值),否则它将不再显示。
希望这有助于某人。
答案 2 :(得分:0)
我不知道你是否可以考虑这个答案,但我很确定你不能删除系统自动显示的信息,而不是你可以访问的信息。我的三星Galaxy S3做同样的事情。
另外,从我在网上看到的内容,当你装入千斤顶时,一些安卓设备也会降低音量,因此“你不会伤害你的听力”。
您可以通过在可能之前或之后显示您自己的通知来覆盖通知吗?通知只是一个标准Toast
。