代码之家  ›  专栏  ›  技术社区  ›  Maksym Gontar

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

  •  0
  • Maksym Gontar  · 技术社区  · 15 年前

    如果你曾经尝试在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, especially in Options Menu
    Issue 4202: Feature Suggestion: permission for intercepting KEYCODE_CALL

    你知道有什么方法可以阻止这两个按钮吗?
    唯一的办法是(和往常一样) write in C ?

    1 回复  |  直到 14 年前
        1
  •  7
  •   David Webb    15 年前

    你可以 capture the Back key quite easily .

    我认为你不能截获主叫和挂断电话的按钮。如果可以,这将允许恶意应用程序阻止用户离开,从而有效地劫持手机。

    应用程序的一个选项是使用 android.intent.category.HOME Intent .