【发布时间】:2012-08-02 15:30:47
【问题描述】:
更新: 我误读了参考资料。我无法停止的关键代码是 ALT 和 META_LEFT
我已经更新了这篇文章的标题。我很抱歉。
我有一个使用蓝牙鼠标演示器来控制它的应用程序。我已经拦截了设备上的所有按钮,除了一个。当它被按下时,我会得到一些不在我的应用程序中发生的事情,比如去 Google Play,或者一个弹出窗口询问我想使用什么音乐播放器。我试图拦截它但失败了。即使是不让键码通过的测试代码,只做一个 Toast 也会让这个键码通过。
有问题的键码是 57 和 117,根据this 是 ALT-MENU。
这是可以成功拦截除此之外的任何其他键的代码。例如,我可以为 24 添加一个 case,平板电脑或鼠标演示器上的音量增大键将不再起作用。
@override // tried both with and without the override
public boolean dispatchKeyEvent(KeyEvent ke){
int keyCode = ke.getKeyCode();
if(ke.getAction() == KeyEvent.ACTION_DOWN){
Toast.makeText(this, String.valueOf(keyCode), Toast.LENGTH_SHORT).show();
switch (keyCode)
{
case 117:
case 57:
case 44:
case 59:
return true;
case 30:
Intent target = new Intent(this, StartLine2.class);
startActivity(target);
return true;
case 19:
new Thread(new Runnable() {
@Override
public void run() {
new Instrumentation().sendKeyDownUpSync(KeyEvent.KEYCODE_TAB);
}
}).start();
return true;
case 20:
new Thread(new Runnable() {
@Override
public void run() {
new Instrumentation().sendKeyDownUpSync(KeyEvent.KEYCODE_DPAD_CENTER);
}
}).start();
return true;
}
}
else if(ke.getAction() == KeyEvent.ACTION_UP){
switch (keyCode){
case 117:
case 57:
case 30:
case 44:
case 59:
case 19:
case 20:
return true;
}
}
return super.dispatchKeyEvent(ke);
}
我期望的是 57 和 117 都没有传递给 dispatchKeyEvent,因此什么也不做。然而,正如我所说,他们启动了一些过程。它曾经是 Google Play,但现在似乎要求我选择一个音乐播放器“使用...完成操作”
理想情况下,我想将该键用于一些有用的事情,但作为后备,只是让错误地点击它而不弄乱我的应用程序将是一个不错的第二选择。
我不知道该怎么做,很想在这个问题上得到一些帮助。
【问题讨论】:
-
@Tim 你能对此发表评论吗?