【问题标题】:In Android Disable ONLY HomeKey Button在 Android 中仅禁用 HomeKey 按钮
【发布时间】:2012-11-22 10:37:44
【问题描述】:

您好,我正在寻找在 Android 中禁用 Only HomeKey。我想做的是

@Override
    public void onAttachedToWindow() {
        this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD);
        super.onAttachedToWindow();
    }
@Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {



        if (event.getKeyCode() == KeyEvent.KEYCODE_BACK) {

            return true;
        }

        if (event.getKeyCode() == KeyEvent.KEYCODE_MENU) {
                        //action
        }
        if (event.getKeyCode() == KeyEvent.KEYCODE_HOME) {
                        //action
        }
        if (event.getKeyCode() == KeyEvent.KEYCODE_DPAD_CENTER) {
            //action
        }

        return false;
    }

但是这样我的后退按钮也被禁用了。有什么办法可以在android中禁用HomeKey。请回复。

【问题讨论】:

  • 主页按钮事件不会传递给常规应用。 code.google.com/p/android/issues/detail?id=1979 - 你不能禁用它。
  • 在我的应用程序中,我试图禁用主页按钮。它在做什么。但这样它也禁用了我不想要的后退按钮
  • 嗨,Zapl,您能解释一下您所说的未交付给应用程序是什么意思吗??谢谢
  • 意味着当用户按下主页按钮时,onKeyDown 永远不会被调用。所以event.getKeyCode() == KeyEvent.KEYCODE_HOME 永远不会是真的。您在那里禁用了后退按钮,因为在event.getKeyCode() == KeyEvent.KEYCODE_BACK 的情况下您返回true,这意味着您的代码处理了该事件并且它不会进入系统,否则会返回。删除该部分,您将再次使用后退按钮。
  • 嗨 zapl。我刚刚检查了 logcat 并分析了按下主页按钮时它会转到 event.getKeyCode() == KeyEvent.KEYCODE_HOME 部分。并且删除后退按钮部分也不能解决我的问题。谢谢顺便说一句

标签: android


【解决方案1】:

documentation 声明:

主页键。此密钥由框架处理,从不交付 到应用程序。

更具体地说,该密钥由 PhoneWindowManager 在方法interceptKeyBeforeDispatching(..) 中使用。在此方法中,密钥被处理和使用,这意味着 Android 不允许覆盖此功能。

更新:

你的行为不再起作用的原因是你自己已经处理好了。密钥进入onKeyDown-方法,您可以通过返回真或假来使用密钥(是或否)。通过实现这个:

 if (event.getKeyCode() == KeyEvent.KEYCODE_BACK) {

       return true;
 }

您明确声明您已在Activity 中处理了返回键,这也意味着“返回”的默认行为被覆盖。要恢复其原始行为,请使用 return super.onKeyDown(keyCode, event);

【讨论】:

  • 好的。感谢您的回复,但是在尝试处理上述代码时,它是如何禁用一切的。?我不能以某种方式只禁用主页按钮而不是返回键
  • 我更新了我的评论。正如我已经解释过的,您无法更改“主页按钮”功能。
  • 嗨,我尝试通过返回 false 而不是返回 true 来做同样的事情。但它仍然不起作用:)
  • 返回超类,这样就可以在那里处理了。
【解决方案2】:

是的,这是可能的。在你的清单中,在你的活动减速下,替换

<category android:name="android.intent.category.LAUNCHER" />

<category android:name="android.intent.category.HOME" />

请注意,进行此更改后,您的应用程序将不会在“所有应用程序”部分中显示。此外,用户需要将您的应用程序设置为默认主屏幕。试试“Toddler Lock”应用程序,它很好地处理了这种情况。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-23
    • 1970-01-01
    • 2018-12-13
    • 1970-01-01
    • 2011-05-22
    相关资源
    最近更新 更多