Android的主页按钮点击事件处理

4
我希望在按下homebuttonclick事件时调用特定的通知显示函数。
我参考了这篇博客:this
代码如下:
@Override
    public boolean onKeyDown(int keyCode, KeyEvent event){
        if(keyCode == KeyEvent.KEYCODE_HOME){
            APP_STATUS="SLEEP";

          LocalToNotification();

        }
        return true;
    }   

但不幸的是,它没有起作用。

我通过调试器进行了测试,但观察到按下主页按钮后调试器也没有进入此行代码。

上述代码有什么问题?

请帮帮我。


你是否进入了这个函数?还是直接跳过了if(keyCode...)的判断? - RaphMclee
我将调试器保持在APP_STATUS="SLEEP"上,但它也没有进入该状态。 - C Sharper
4个回答

8

在较旧版本的Android上这是工作的。但是Android进行了更改,因为他们说“Home按钮应该保持Home按钮”,而且他们不希望任何人覆盖Home按钮。因此,由于这个原因,您的代码不再起作用。

如果您想在按下home按钮时执行某些操作,则将其放置在onPause方法中。


先生,使用onpause确实有效,但不知道为什么博客中的代码无法正常工作。 - C Sharper
正如我所说,Android不希望在主页按钮上执行任何操作。如果您查看链接,您将只找到6个关键事件,而主页按钮未列出,因为它不应被覆盖。http://docs.appcelerator.com/titanium/latest/#!/api/Titanium.UI.Window-event-android:back - silvia_aut
我正在onPause中执行t,但重新回到前台需要很长时间。实际上,我正在创建一个屏幕锁定应用程序。@silvia_aut - Sagar Nayak

2
protected void onUserLeaveHint() {

    finish();
    super.onUserLeaveHint();
}

4
解释你的答案。不要只回答代码,总是附上一些解释。 - vjdhama
主页按钮不应被覆盖。 - user3651677
但是当我们点击主页按钮时,默认情况下会调用userleaveHint接口,这意味着用户暗示要离开应用程序。 - user3651677

2

按键代码常量:主页键。该键由框架处理,不会传递给应用程序。


1
protected void onUserLeaveHint ()

Added in API level 3

当用户选择将活动放入后台时,onUserLeaveHint()作为活动生命周期的一部分被调用。例如,当用户按Home键时,将调用onUserLeaveHint(),但是当来电导致通话Activity自动前台时,中断的活动不会调用onUserLeaveHint()。在调用它时,在活动的onPause()回调之前立即调用此方法。
这个回调和onUserInteraction()旨在帮助活动智能地管理状态栏通知;具体来说,帮助活动确定取消通知的适当时间。 代码:
    @Override
    protected void onUserLeaveHint()
    {
        // TODO Auto-generated method stub
        super.onUserLeaveHint();

        new OfflineAsyncTask(BaseActivity.this).execute();
    }

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