如何在Android设备中检查音量增大和音量减小按钮是否同时按下几秒钟?
如果按下,我需要调用一个函数。如果我的应用程序安装在任何Android设备中,此检测应该有效。任何近乎解决方案也会这样做。
答案 0 :(得分:2)
您需要使用onKeyDown回调来检测何时按下这两个键,类似应该有效:
public boolean up,down;
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_VOLUME_DOWN){
down = true;
} else if(keyCode == KeyEvent.KEYCODE_VOLUME_UP){
up = true;
}
if(up && down) {
// Two buttons pressed, call your function
}
return true;
}
public boolean onKeyUp(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_VOLUME_DOWN){
down = false;
} else if(keyCode == KeyEvent.KEYCODE_VOLUME_UP){
up = false;
}
return true;
}
答案 1 :(得分:1)
您需要覆盖某些方法并在那里应用您的逻辑:例如,创建以下变量
private static final int PRESS_INTERVAL = 1000;
private long upKeyTime = 0;
覆盖以下
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (KeyEvent.KEYCODE_VOLUME_DOWN == event.getKeyCode()) {
if ((event.getEventTime() - upKeyTime) < PRESS_INTERVAL) {
Toast.makeText(this, "Pressed together", Toast.LENGTH_SHORT).show();
}
return true;
} else if (keyCode == KeyEvent.KEYCODE_VOLUME_UP) {
return true;
}
return super.onKeyDown(keyCode, event);
}
@Override
public boolean onKeyUp(int keyCode, KeyEvent event) {
if (KeyEvent.KEYCODE_VOLUME_UP == keyCode) {
upKeyTime = event.getEventTime();
}
return super.onKeyUp(keyCode, event);
}
如果用户在1秒钟内按下音量键后按下音量调低键,此代码将打印一个吐司。我希望您可以将此代码更改为向下组合键,因为这是上下组合。
答案 2 :(得分:1)
public static final int VOLUME_PRESSED__INTERVAL = 100;
private long upKeyEventTime = 0;
private long downKeyEventTime = 0;
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_VOLUME_DOWN || keyCode == KeyEvent.KEYCODE_VOLUME_UP) {
if (keyCode == KeyEvent.KEYCODE_VOLUME_DOWN) {
downKeyEventTime = event.getEventTime();
} else {
upKeyEventTime = event.getEventTime();
}
if (Math.abs(upKeyEventTime - downKeyEventTime)<= VOLUME_PRESSED__INTERVAL){
//TODO call your method
return false;
}
}
return super.onKeyDown(keyCode, event);
}
如果要提高准确性,可以将VOLUME_PRESSED__INTERVAL = 0;