Android 音量首选项-阻止音量键
我在解决方案中也遇到过一些类似的问题,但我找不到一个适合我的情况 我正在制作VolumePreference扩展对话框首选项,让用户为某些报警选择音量级别 在其他首选项中,用户选择报警期间播放的所需铃声。当用户在VolumePreference中选择音量时,它也会播放,所以他知道它的实际声音 在另一个首选项中,用户选择播放时闹钟是否应覆盖手机的媒体音量-我会这样做,所以,如果用户希望为闹钟设置固定的音量级别,则它不应受到音量键等更改的影响。 如果用户选择这样做,在开始播放AlarmActivity中的报警之前,我使用AudioManager将音量设置为最大音量,并截获音量键的所有按键事件,在报警结束后恢复音量 问题是,我无法在VolumeReference中阻止卷键,因为没有onKeyDown方法 经过一些检查,我发现AudioManager的RegisterDiaButtonVentReceiver方法将一个组件注册为MEDIA_按钮意图的唯一接收器,我相信这有助于在我的情况下制作一些空接收器,甚至在我想要开始锁定、解锁后取消注册时使音量锁定更通用,但它是从API8开始工作的,而我正在为API7制作应用程序——从我所读到的内容来看,API7仍然占据着超过10%的市场份额,所以我想坚持下去Android 音量首选项-阻止音量键,android,Android,我在解决方案中也遇到过一些类似的问题,但我找不到一个适合我的情况 我正在制作VolumePreference扩展对话框首选项,让用户为某些报警选择音量级别 在其他首选项中,用户选择报警期间播放的所需铃声。当用户在VolumePreference中选择音量时,它也会播放,所以他知道它的实际声音 在另一个首选项中,用户选择播放时闹钟是否应覆盖手机的媒体音量-我会这样做,所以,如果用户希望为闹钟设置固定的音量级别,则它不应受到音量键等更改的影响。 如果用户选择这样做,在开始播放AlarmActivit
有没有关于如何阻止PreferenceDialog中的音量更改的想法?在一些思考解决方案被证明非常简单之后-可以覆盖在DialogPreference的onCreateDialogView中创建的onKeyDown视图方法,或者设置该视图的onKeyListener 第一个例子:
LinearLayout layout = new LinearLayout(mContext)
{
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_VOLUME_DOWN
|| keyCode == KeyEvent.KEYCODE_VOLUME_UP) return true;
return super.onKeyDown(keyCode, event);
}
@Override
public boolean onKeyUp(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_VOLUME_DOWN
|| keyCode == KeyEvent.KEYCODE_VOLUME_UP) return true;
return super.onKeyUp(keyCode, event);
}
};
第二个示例mDialogView保存为对第一个示例中布局的引用:
mDialogView.setOnKeyListener(new View.OnKeyListener() {
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_VOLUME_DOWN
|| keyCode == KeyEvent.KEYCODE_VOLUME_UP)
return true;
return false;
}
});
我选择了第二种解决方案,因为我认为它更灵活,至少有两个原因
我可以删除侦听器以停止阻止卷键,而在第一种方法中我不能
在第一个解决方案中,我需要决定在创建视图时是否要阻止关键点输入-如果VolumeReference扩展了一些不应该阻止关键点输入的其他首选项,那么就没有多大用处了