Android - 捕获/抑制Home和EndCall按钮事件?

Mak*_*tar 0 android key keydown

如果您曾试图在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();
}
Run Code Online (Sandbox Code Playgroud)

似乎onKeyDown过滤掉所有键,但"后退"和"菜单"......
嗯,这不是真的!主页按钮仍将为您带来主屏幕,结束通话按钮将运行原生的Locker应用程序!

研究员在那里也声称它是一个问题:
如何从ENDCALL按钮
问题收听Home Back屏幕按钮
按下按键在Activity中按,特别是在选项菜单中
问题4202:功能建议:拦截KEYCODE_CALL的权限

你知道阻止这些按钮的任何解决方法吗?
唯一的方法(经常) - 用C写?

Dav*_*ebb 7

您可以非常轻松地捕获Back键.

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

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