按下主页按钮时的呼叫方法

ing*_*.am 52 android menu button android-sdk-1.6

我的一个Android活动中有这个方法:

@Override
public boolean onKeyDown(int keyCode, KeyEvent event)
{
    if(keyCode == KeyEvent.KEYCODE_BACK)
    {
        Log.d("Test", "Back button pressed!");
    }
    else if(keyCode == KeyEvent.KEYCODE_HOME)
    {
        Log.d("Test", "Home button pressed!");
    }
    return super.onKeyDown(keyCode, event);
}
Run Code Online (Sandbox Code Playgroud)

但是,即使KEYCODE_HOME有效,log方法也不会触发.这适用于后退按钮.有谁知道这是为什么以及如何使这个工作?

Nic*_*ion 32

"主页"按钮是一个非常危险的按钮,因此,Android不会让您以与执行"返回"按钮相同的方式覆盖其行为.

看看这个讨论.

您会注意到主页按钮似乎是作为意图调用实现的,因此您最终必须为您的活动添加意图类别.然后,只要用户回家,您的应用就会显示为一个选项.您应该考虑使用主页按钮实现的目标.如果它不替换设备的默认主屏幕,我会担心重载HOME按钮,但它是可能的(在上面的线程中进行讨论.)

  • 如果我想停止媒体播放器呢?如果我按Home继续播放...... (3认同)
  • 我不需要覆盖主页按钮,我只需要在应用程序消失之前停止音乐! (3认同)

小智 22

我花了将近一个月的时间来完成这项工作.刚才我解决了这个问题.在您的活动的onPause()中,您必须包含以下if条件:

    if (this.isFinishing()){
        //Insert your finishing code here
    }
Run Code Online (Sandbox Code Playgroud)

函数isFinishing()返回一个布尔值.如果您的应用实际关闭,则为True;如果您的应用仍在运行,则为False,例如屏幕关闭.

希望能帮助到你!


Lio*_*ior 12

HOME按钮无法被应用程序拦截.这是Android中的一种设计行为.原因是为了防止恶意应用程序控制您的手机(如果用户无法按回或回家,他可能永远无法退出应用程序).主页按钮被视为用户的"安全区域",并将始终启动用户配置的主应用程序.

以上唯一的例外是任何配置为主页替换的应用程序.这意味着它在AndroidManifest.xml中为相关活动声明了以下内容:

<intent-filter>
   <action android:name="android.intent.action.MAIN" />
   <category android:name="android.intent.category.HOME" />
   <category android:name="android.intent.category.DEFAULT" />
</intent-filter>
Run Code Online (Sandbox Code Playgroud)

按主页按钮时,onNewIntent将调用当前主应用程序的活动.


小智 7

我发现当我按下HOME按钮时,会调用onStop()方法.您可以使用以下代码来监视它:

@Override
    protected void onStop() 
    {
        super.onStop();
        Log.d(tag, "MYonStop is called");
        // insert here your instructions
    }
Run Code Online (Sandbox Code Playgroud)

  • 说实话,这个答案是错的.onStop在各种偶然事件中被调用(如italo所述),不仅在按下Home按钮时! (52认同)
  • 它可以工作,但是当你去另一个Activity时它也会被调用.因此,只有当您退出应用程序时才会调用它. (15认同)
  • 请注意,即使在屏幕旋转时,通常也会调用`onStop` (3认同)