2

我的问题是不言自明的。我进行了很多搜索,但找不到处理最近活动按钮单击的方法。我想从 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 时,它甚至不打印最后一条日志语句,即未处理的事件。

4

2 回答 2

6

通过查看文档,我认为这KeyEvent.KEYCODE_APP_SWITCH就是您正在寻找的内容。

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


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

-eventKEYCODE_APP_SWITCH不会传递给onKeyDown()dispatchKeyEvent()。因此,它无法处理。

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

键码常量:Home键。该密钥由框架处理,从不传递给应用程序


似乎也没有真正简单的方法可以自己创建真正的锁屏。请参阅此讨论:开发自定义锁定屏幕

很有可能在默认锁屏上显示一些自定义信息:有没有办法让我在锁屏上显示自定义消息?


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

L Developer Preview引入了一个新的任务锁定 API,可让您暂时限制用户离开您的应用程序或被通知打断。例如,如果您正在开发一个教育应用程序以支持 Android 上的高风险评估要求,则可以使用此方法。一旦您的应用激活此模式,用户将无法查看通知、访问其他应用或返回主屏幕,直到您的应用退出该模式。

于 2012-08-20T14:02:09.890 回答
1

如果您想以 Kiosk 模式运行您的应用程序,则可以禁用com.android.systemui并用软按钮替换按钮(例如 Button Savior 应用程序,但请注意不要让您的设备变砖!)。似乎很多化妆品都消失了,我不知道它是否会以某种未知的方式影响系统稳定性,但到目前为止我已经让它工作了。

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

另请参阅我的帖子: Safe to disable com.android.systemui?

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

于 2015-03-24T10:39:19.687 回答