我在尝试为“后退”按钮实现长按捕获事件时,在我的Android应用程序中发现了一个奇怪的行为。
我将以下代码用于我想要在所有活动中管理的所有物理键(我删除了不重要的部分):
// Called when the user presses the "physical" buttons
@Override
public boolean dispatchKeyEvent(KeyEvent aEvent)
{
// Used to know which event was triggered
int action = aEvent.getAction();
int keyCode = aEvent.getKeyCode();
// Get the pressed button
switch (keyCode)
{
// Key "back"
case KeyEvent.KEYCODE_BACK:
// If the button is pressed down
if (action == KeyEvent.ACTION_DOWN)
{
// DEBUG
App.debug("BACK button is pressed!");
}
// If the button is released
else if (action == KeyEvent.ACTION_UP)
{
// DEBUG
App.debug("BACK button is released!");
}
return true;
[...]
default:
return super.dispatchKeyEvent(aEvent);
}
}
“App.debug()”方法只是“Log.d()”的包装器。
当我测试上面的代码时,通过“后退”按钮上的一个简单的“点击”,我可以看到预期的行显示在logcat中(当我触摸后退按钮时,“按下BACK按钮!” BACK按钮被释放!“当我移开手指时。”
现在,当我将手指放在后退按钮上时,我只能看到2次“按下后退按钮!”出现在logcat中,它们之间大约相隔半秒钟。然后当我释放按钮(比如10秒钟)时,我看到“BACK按钮被释放了!”句子按预期出现。这是我在logcat中的内容:
BACK button is pressed!
- >一旦我用手指触摸按钮
BACK button is pressed!
- >半秒钟后
BACK button is released!
- >一旦我移开手指
为什么“后退”按钮长按ONLY会触发两个“按钮按下”事件?
编辑:我认为我不够清楚,对不起(英语不是我的自然语言)...问题是我只有触发2个事件,只要我的手指仍然存在在按钮上它应该触发许多“按钮按下”事件,直到我移开我的手指。添加“仅”应该在我的描述中。
编辑2:经过一些验证后,它似乎只发生在某些设备上......也许这里涉及Android版本?
“未按预期工作”经过测试的设备是:
“按预期工作”测试的设备是:
有什么想法吗?
度过愉快的一天。
答案 0 :(得分:0)
两个button_down事件:1表示正常按下,1表示长按。
在Android 2.0中,Activity包含method
public boolean onKeyLongPress(int keyCode, KeyEvent event)
例如,按下后退按钮上的长按键将是:
@Override
public boolean onKeyLongPress(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK)
{
// do your stuff here
return true;
}
return super.onKeyLongPress(keyCode, event);
}
正常点击后退按钮事件。您可以使用:
@Override
public void onBackPressed()
{
// code here to show dialog
super.onBackPressed(); // optional depending on your needs
}