一个服务是否能检测到后退按钮的按下?

3

一个服务可以检测到返回按钮的按下吗?

正如标题所说的那样?我已经做了很多谷歌搜索,但是找不到确定的答案。也没有办法去做吗?

3个回答

4

一个服务能检测到后退按钮的按下吗?

很抱歉,不行。如果你有一个处于前台的活动,该活动可以检测到后退按钮的按下。如果你没有一个处于前台的活动,则后退按钮与你的代码无关。


4
我认为这并不完全正确。例如,Service可以执行使用WindowManager#addView()显示窗口的代码,如果该窗口获得焦点,则KeyEvent.KEYCODE_BACK事件将传递给窗口的根视图,我假设?这完全取决于哪个窗口当前拥有焦点......而不是您使用的组件类型。当然,除非您正在重新编写Facebook Chatheads,否则99%的时间您的服务将不会向屏幕显示自己的窗口,因此一般情况下服务将无法接收到返回按钮单击事件。 - Alex Lockwood
1
我正在进行一些聊天头服务演示。我该如何向窗口添加监听器?我尝试在视图上使用setonkeylistener,但无法捕获返回操作... :s - DaniG

2

不是这样的。返回按钮是在活动级别上管理的,而服务与此级别完全分离。

您唯一的选择是将后退操作从您的活动传递到您的服务。但是,您需要确保您的活动在前台运行。


0
如果您的服务中添加了视图或其他内容,那么可以使用EditText框来捕获返回按键。只需设置其onKeyListener即可。(将EditText框隐藏在其他视图后面)
editText.setOnKeyListener(new View.OnKeyListener() {
            @Override
            public boolean onKey(View v, int keyCode, KeyEvent event) {
                Log.d("TAG", "onKey() called with: " + "v = [" + v + "], keyCode = [" + keyCode + "], event = [" + event + "]");
                if (keyCode == KeyEvent.KEYCODE_BACK && event.getAction()== KeyEvent.ACTION_UP){
                    onBackPress();
                }
                return false;
            }
        });

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接