【问题标题】:Android tablet doesn't fire KeyboardEvent.KEY_DOWNAndroid 平板电脑不会触发 KeyboardEvent.KEY_DOWN
【发布时间】:2012-02-28 21:24:42
【问题描述】:

我正在尝试证明 Android 主屏幕按钮的默认功能,但是当我在平板电脑上按下主屏幕键时,KeyboardEvent.KEY_UP 事件不会触发。 (eee 变压器素数)还有另一个为什么要检测和停止此功能吗?
这是我尝试使用的代码

import mx.events.FlexEvent;

        // Add the hardware key event handlers to the stage.
        protected function appCompleteHandler(event:FlexEvent):void {
            stage.addEventListener(KeyboardEvent.KEY_DOWN, handleButtons,false, 1);
            stage.addEventListener(KeyboardEvent.KEY_UP, handleButtons,false, 1);
        }

        // Event handler to handle hardware keyboard keys.
        protected function handleButtons(event:KeyboardEvent):void
        {
            trace("Event fired");
            if (event.keyCode == Keyboard.HOME) {
                event.preventDefault();
                trace("home");
            } else if (event.keyCode == Keyboard.BACK) {
                // Hanlde back button.
                event.preventDefault();
                trace("back");
            }

        }

【问题讨论】:

  • 它甚至不输出“事件触发”吗?
  • 不,它甚至没有显示任何东西都命中了 bin。它只是退出应用程序。没有跟踪(“事件触发”);完全没有。
  • 所以显然它没有触发任何一个事件,这告诉我任何一个主题按钮都不被视为键盘中的键,或者应用程序 (AIR) 一旦按下它就会失去焦点。
  • 你见过这个吗? adobe.com/devnet/air/quick_start_as/quickstarts/…我看起来你根本无法阻止它。是否可以使用下面提供的代码来纠正 Java 扩展以覆盖主页按钮?我不是Java程序员,所以如果您知道的话,我只是在徘徊。 edit 查看文章的 Home 软键部分。

标签: android actionscript-3 apache-flex mobile air


【解决方案1】:

主页按钮是一个特殊的按钮,您不能拦截。您的代码是正确的,但是一旦 KEY_UP 事件发生,您的应用将暂停和停止,没有机会对 KEY_UP 做出反应。

但是,有一种间接的方式。虽然您无法停止 HOME 键的工作,但您可以进行自己的 HOME 活动。第一次运行它时,系统会询问您要将哪个活动用作 HOME。从那里你所要做的就是添加一个按钮,一旦你输入密码,就会启动真正的家庭活动。

更多详情,看这个问题的答案:Android - Is It possible to disable the click of home button

【讨论】:

  • 所以没有办法说需要密码才能退出应用程序?例如,我想在用户能够退出应用程序之前要求提供密码。我想做的是制作一个自助服务终端风格的应用程序,其中退出应用程序的唯一两种方法是使用密码或关闭桌子并重新启动它。
  • @Justin 感谢您阐明您想要做什么。我已经编辑了我的答案。您无法拦截主页按钮,但您可以制作类似信息亭的应用程序。
  • 这是 java 正确的,所以我必须将它构建到 flex 中的本机扩展中才能使其正常工作?顺便感谢您的帮助。
  • 很抱歉,我无法为您提供帮助,我对 adobe flex 一无所知。祝你好运!
【解决方案2】:

试试这个:

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

【讨论】:

  • 这不是 Java 吗?我正在使用 adobe air 在 ActionScript 中构建应用程序,但感谢重播。
  • 是的,对不起。直到我再看一遍这可能不是原生 android 之后,我才想到。
  • 不用担心,您是否知道任何关于偶然纠正 java 扩展空气的事情,因为这个问题正在变成这样?有趣的是,因为您的回答是针对 Java 的,所以它让我了解了如何解决我遇到的问题,但我仍然不确定它是否可能。
猜你喜欢
  • 1970-01-01
  • 2012-08-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-13
相关资源
最近更新 更多