在安卓系统中如何捕获按键事件

11

我该如何使用Android SDK捕获手机按键?我已经寻找了几个小时,但没有找到任何有用的信息。

例如:

在某些情况下,我想要捕获用户按下手机上的“挂断”按钮时的消息,并在消息传递到操作系统之前丢弃它。这种做法可行吗?

1个回答

19

您可以从视图或整个应用程序中处理关键事件:

从视图处理onKey:

public boolean onKey(View v, int keyCode, KeyEvent event) {
    switch (keyCode) {
        case KeyEvent.KEYCODE_ENTER:
         /* This is a sample for handling the Enter button */
      return true;
    }
    return false;
}

记得实现OnKeyListener并设置你的监听器 YourView.setOnKeyListener(this);

第二种可能性是:

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
     switch (keyCode) {
     case KeyEvent.KEYCODE_MENU:
        /* Sample for handling the Menu button globally */
        return true;
     }
     return false;
} 

你也可以看一下 onKeyUp

资源:http://developer.android.com/reference/android/view/View.html

在这里,你可以看到所有 KeyEvents 的列表。


3
请注意,这种方法并不适用于所有按键。 HOME 键肯定无法通过此方式捕获,而 END_CALL 可能也不行——我忘记了。另外,如果你想拦截“返回”按钮,在较新的 Android SDK 中最好实现 onBackPressed(),但在老旧的手机上可能无效。 - CommonsWare
END_CALL 也无法被应用程序拦截。请注意,原帖作者似乎想在按键传递到另一个应用程序之前拦截它们,这对于任何按键来说都是不可能的。 - hackbod
还要注意,像摩托罗拉Droid和Nexus One这样的手机上甚至不存在硬件END_CALL按钮,因此对该按钮进行任何特殊操作可能并不是一个好主意。 - Mark B

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接