0

如果您曾经尝试在 Android 上编写储物柜应用程序,那么您肯定会遇到这个问题:

boolean mBackPressed = false;

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (event.getAction() == KeyEvent.ACTION_DOWN) {
        switch (keyCode) {
        case KeyEvent.KEYCODE_BACK:
            mBackPressed = true;
            break;
        case KeyEvent.KEYCODE_MENU:
            if (mBackPressed)
                unLock();
            break;
        default:
            mBackPressed = false;
            showMessage();
            break;
        }
    }
    return true;
}

private void showMessage() {
    Toast.makeText(getBaseContext(), "Back + Menu", Toast.LENGTH_SHORT)
            .show();
}

private void unLock() {
    this.setResult(Activity.RESULT_OK);
    this.finish();
}

似乎 onKeyDown 正在过滤除“Back”和“Menu”之外的所有键......
好吧,这不是真的!主页按钮仍会为您带来主屏幕,结束通话按钮将运行本机储物柜应用程序!

那里的研究员也声称这是一个问题:
How to listen from ENDCALL button
problem With Home Back screen button
Supressing Key presses in Activity,尤其是在选项菜单
问题 4202:功能建议:拦截 KEYCODE_CALL 的权限

您知道阻止两个按钮的任何解决方法吗?
是唯一的方法(经常) -用 C 编写吗?

4

1 回答 1

7

您可以很容易地捕获 Back 键

我认为您无法拦截 Home 和 End Call 按钮。如果可以的话,这将允许恶意应用程序阻止用户离开它,从而有效地劫持手机。

您的应用程序的一个选项是使用 android.intent.category.HOMEIntent编写替换主屏幕。

于 2010-01-04T09:11:29.480 回答