【问题标题】:How to ignore button click of "Recent Activity Button" in android 3.0如何在android 3.0中忽略“最近活动按钮”的按钮点击
【发布时间】:2012-08-20 13:53:19
【问题描述】:

我的问题是不言自明的。 我进行了很多搜索,但找不到处理最近活动按钮单击的方法。 我想忽略 android 3.0 平板电脑状态栏中最近活动按钮的硬件按钮点击。

目前我尝试过的是:

public boolean onKeyDown(int keyCode, KeyEvent event) {

       if(keyCode == KeyEvent.KEYCODE_BACK) 
       { 
              return true;
       }
       // in the same way I have written it for KEYCODE_HOME
}

你能告诉我应该写什么来处理最近的活动按钮吗?

提前感谢您。 :)

编辑:这是我现在尝试过的。 KEYCODE_APP_SWITCH 不工作。

public boolean onKeyDown(int keyCode, KeyEvent event) {
        Log.e("INSIDE", "LOCKDEMO");
        if (keyCode == KeyEvent.KEYCODE_BACK) {
            Log.e("KEY EVENT", "BACK");
            return true;
        }
        if (keyCode == KeyEvent.KEYCODE_HOME) {
            Log.e("KEY EVENT", "HOME");
            return true;
        }
        if(keyCode == KeyEvent.FLAG_FROM_SYSTEM) {
            Log.e("KEY EVENT", "SYSTEM");
            return true;
        }
        if(keyCode == KeyEvent.FLAG_KEEP_TOUCH_MODE) {
            Log.e("KEY EVENT", "TOUCH MODE");
            return true;
        }
        if(keyCode == KeyEvent.FLAG_SOFT_KEYBOARD) {
            Log.e("KEY EVENT", "SoFT KEYBOARD");
            return true;
        }
        if(keyCode == KeyEvent.FLAG_VIRTUAL_HARD_KEY) {
            Log.e("KEY EVENT", "HARDWARE KEY");
            return true;
        }
        if(keyCode == KeyEvent.KEYCODE_APP_SWITCH) {
            Log.e("KEY EVENT", "APP SWITCH");
            return true;
        }

        Log.e("KEY EVENT", "NOT HANDLED");
        return super.onKeyDown(keyCode, event);
    }

当我按下RecentAppBtn 时,它甚至不打印最后一条日志语句,即未处理事件。

【问题讨论】:

    标签: android android-3.0-honeycomb statusbar


    【解决方案1】:

    通过查看文档,我认为 KeyEvent.KEYCODE_APP_SWITCH 是您要搜索的内容。

    不过,您也可以使用KeyEvent.getKeyCode()-method(在event-参数上)在您按下应用程序切换器时查看触发了哪个键码(以及是否触发了任何键)。


    我玩了一段时间后得出的结论是,这是不可能的。

    KEYCODE_APP_SWITCH-event 既没有传递给onKeyDown(),也没有传递给dispatchKeyEvent()。因此,无法处理。

    此外,您会在 Android 4 设备上遇到问题,因为 KEYCODE_HOME-event 也不再分派给上述任何方法。请参阅文档:

    键码常量:Home键。此密钥由框架处理 并且永远不会交付给应用程序


    似乎也没有真正简单的方法可以自己创建真正的锁屏。请参阅此讨论:Developing a custom lock screen

    可以在默认锁屏上显示一些自定义信息:Is there a way for me to show a customized message on the lock screen?


    为了完整起见:在 Android L 中,您将能够“将用户锁定在您的应用中”,因此您无需手动覆盖硬件键。这是relevant information

    L 开发者预览版引入了一个新的任务锁定 API,它允许 您暂时限制用户离开您的应用或 被通知打断。这可以用于,例如,如果您 正在开发一个教育应用程序来支持高风险评估 对安卓的要求。 一旦您的应用激活此模式,用户将 无法查看通知、访问其他应用程序或返回 主屏幕,直到您的应用退出该模式。

    【讨论】:

    • 基本上,我在我的应用程序中实现了(自定义)锁屏功能,用户可以看到 UI,但他无法从 UI 中单击任何视图,因此我禁用了主页和返回键同样,但如果用户按下最近的活动按钮,应用程序可能会被最小化,这是我不希望发生的。 KEYCODE_APP_SWITCH 也不起作用。那么您能告诉我是否可以忽略此事件?
    • @Shrikant 您是否检查过当您点击该按钮时是否生成了 KeyEvent?就像我上面解释的那样。
    • 嗨卢卡斯!我仍然被这个问题困扰。是的,我检查了你的要求。我已经更新了我的问题。你能帮我解决这个问题吗?
    • @Shrikant 我做了一些进一步的研究并更新了我的答案。看看吧。
    【解决方案2】:

    如果您想以 Kiosk 模式运行您的应用程序,则可以禁用 com.android.systemui 并用软按钮替换按钮(例如 Button Savior 应用程序,不过小心不要让你的设备变砖!)。看起来很多装饰性的东西消失了,我不知道它是否会以某种未知的方式影响系统稳定性,但到目前为止我已经让它工作了。

    如果有人知道更多关于 com.android.systemui、它的真正作用以及禁用它是否安全,请发表评论!

    另见我的帖子: Safe to disable com.android.systemui?

    我希望在哪里得到一些答案...

    【讨论】:

    • 在有根设备上,我建议您改用 Xposed。这样更好。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多