【问题标题】:How to catch the Home button click in android?如何在android中捕捉主页按钮?
【发布时间】:2012-05-30 04:35:40
【问题描述】:

从stackoverflow中的答案我发现主页按钮可以被覆盖? 但我在安卓市场找到了一个名为“Mxplayer”的应用程序,你可以在播放视频时锁定所有按钮。他们是怎么做到的? 我们可以覆盖android中的主页按钮吗?

【问题讨论】:

    标签: android


    【解决方案1】:

    此解决方案适用于 2.3,

    在您的 Activity 中覆盖以下方法,

    @Override
    public void onAttachedToWindow() {
        super.onAttachedToWindow();
        this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD);           
    }
    

    现在像这样处理关键事件,

    @Override
    
    public boolean onKeyDown(int keyCode, KeyEvent event) {
    
       if(keyCode == KeyEvent.KEYCODE_HOME)
        {
         Log.i("Home Button","Clicked");
        }
       if(keyCode==KeyEvent.KEYCODE_BACK)
       {
    
            finish();
       }
    return false;
    

    };

    【讨论】:

    • 但这会取消主页按钮的默认行为。即使我在onKeyDown 中使用return super(keyCode, event) 而不是return false
    • 我想捕捉主页按钮按下来做一些与跟踪相关的事情,但对用户的效果必须是相同的。
    • 然后尝试不覆盖 onKeyDown。在 onAttachedWindow() 中做你的事情,看看 ti 是否有效
    • 即使设置了“DISABLE_KEYGUARD”权限,我也会收到以下错误。 4.1 修复了这个安全漏洞吗? android.view.WindowManager$BadTokenException: 无法添加窗口 android.view.ViewRootImpl$W@41730348 -- 此窗口类型的权限被拒绝
    • @Graeme 我在 ICS 和果冻豆版本中得到了相同的结果,你有办法解决这个问题吗?
    【解决方案2】:

    是的,你可以。使用以下代码:

    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if ((keyCode == KeyEvent.KEYCODE_HOME)) {
            //do nothing
            return true;
        }
        return super.onKeyDown(keyCode, event);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-05-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-16
      • 2015-02-24
      • 1970-01-01
      • 1970-01-01
      • 2013-05-15
      相关资源
      最近更新 更多