onKeyDown和onKeyLongPress [英] onKeyDown and onKeyLongPress
问题描述
我希望我的应用程序对正常和长按的音量按钮的按键事件做出不同的反应.
I want my application to react differently to a normal and a long pressed Key Event of the Volume Buttons.
我已经看过这,但是如果我按住音量按钮,在得到KeyLongPressed
事件之前,我得到了很多KeyDown
事件.
I've already seen this, but if I keep the volume button pressed, I get a lot of KeyDown
Events before I get the KeyLongPressed
Event.
我想有一个或另一个而不是两个,所以我可以短按调整音量,长按跳过曲目.
I'd like to have either one event or the other, not both, so that I can adjust the Volume at a short press and skip a track at a long press.
你能帮我吗?
这是我的代码:
@Override
public boolean onKeyLongPress(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_VOLUME_DOWN)
{
Log.d("Test", "Long press!");
return true;
}
return super.onKeyLongPress(keyCode, event);
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_VOLUME_DOWN) {
event.startTracking();
Log.d("Test", "Short");
return true;
}
return super.onKeyDown(keyCode, event);
}
任何帮助表示赞赏! -虹膜
Any help appreciated! - Iris
推荐答案
这是我编写的代码.它像一种魅力.也许您可以对其进行优化以获得更好的逻辑.但是您会明白这一点的.关键是使用标志. 短按是我们在短时间内按下音量按钮然后松开的按钮.因此, onKeyUp 可以帮助我们检测短按.
Here is the code that I wrote. It works like a charm. May be you can optimize it for better logic. But you will get the point with it. The key is to use flags. Short press is a press where we press volume button for short time and release. So onKeyUp is the one which will help us detect short presses.
package com.example.demo;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.KeyEvent;
import android.view.Menu;
public class TestVolumeActivity extends Activity {
boolean flag = false;
boolean flag2 = false;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_splash_screen);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.activity_splash_screen, menu);
return true;
}
@Override
public boolean onKeyLongPress(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_VOLUME_DOWN) {
Log.d("Test", "Long press!");
flag = false;
flag2 = true;
return true;
}
return super.onKeyLongPress(keyCode, event);
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_VOLUME_DOWN) {
event.startTracking();
if (flag2 == true) {
flag = false;
} else {
flag = true;
flag2 = false;
}
return true;
}
return super.onKeyDown(keyCode, event);
}
@Override
public boolean onKeyUp(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_VOLUME_DOWN) {
event.startTracking();
if (flag) {
Log.d("Test", "Short");
}
flag = true;
flag2 = false;
return true;
}
return super.onKeyUp(keyCode, event);
}
}
所有长按的Logcat(未检测到短按):
10-18 02:06:15.369: D/Test(16834): Long press!
10-18 02:06:18.683: D/Test(16834): Long press!
10-18 02:06:21.566: D/Test(16834): Long press!
10-18 02:06:23.738: D/Test(16834): Long press!
所有短按的Logcat:
10-18 02:07:42.422: D/Test(16834): Short
10-18 02:07:43.203: D/Test(16834): Short
10-18 02:07:43.663: D/Test(16834): Short
10-18 02:07:44.144: D/Test(16834): Short
这篇关于onKeyDown和onKeyLongPress的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!