2014-01-15 369 views
1

我只想在主页按钮(应用程序发送到后台)时才运行代码。我尝试过使用生命周期方法,但问题在于,当其他对话/活动启动时,它们也会被执行。我只想检查应用程序是否发送到后台。我怎样才能做到这一点?如何按下主页按钮时执行代码?

+0

为什么你想这样做? –

+0

我有一个密码保护的活动..如果用户调用此活动,然后单击主页按钮并再次调用该应用程序,则会显示相同的活动。我想确保如果用户调用这个活动,他应该给他的密码,当他在这个活动中,并按下主页按钮并再次启动该应用程序时,活动必须重新开始并且不显示相同的活动。因为我可以使用密码进入这个活动,然后可以将活动发送到背景,然后如果其他人使用我的手机并启动应用程序,他可以看到密码保护活动 – androidBeginner

回答

0

嘛,因为你正在写的代码,你可以设置一些布尔标志,当你开始明确另一acitivty,检查,当你的活动经过的onPause()...

,如果他们是假的,这意味着有人别的是暂停你的活动。

也许不是最优雅的解决方案,但它会工作,如果这是你唯一的问题。

+0

我正在使用布尔标志,但我可以'使用onePause(),因为当我使用应用程序并启动另一个活动时,也会调用onPause()..例如,我不想在使用应用程序时总是输入密码,但只有当应用程序发送到后台时再次启动 – androidBeginner

+0

您需要检查'onPause()'中的布尔值。如果它是假的,你知道另一个活动没有开始。 – Tunga

2

onOptionsItemSelected(MenuItem item);,检查是否点击的产品home键:

编辑:

@Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     switch (item.getItemId()) { 
     case android.R.id.home: 
      finish(); 
      return true; 
     } 
     return super.onOptionsItemSelected(item); 
    } 
+0

sry无法正常工作......我只想按主页按钮时完成当前活动 – androidBeginner

+0

您如何设置您的ActionBar?发布一些代码,我们可能会更好地帮助你。如果您尝试在按Home按钮时完成当前活动,只需在case语句中添加finish()。 – Submersed

+0

是的,我已经尝试过,但它没有奏效。它没有检测到homebutton事件。覆盖onUserLeaveHint()为我工作 – androidBeginner

0

你可以有一个跟踪系统(基本上是一个计数器)知道,当你的活动之一恢复并暂停,从而让你知道你的任何活动是否开放。

这样你就可以知道你的应用是否“打开”。但这不仅适用于主页按钮,还适用于后退按钮(最后关闭应用程序)或甚至从通知栏中打开另一个应用程序。

0

Android操作系统将杀死您的应用程序以释放资源,它不会一直呆在后台。如果您希望应用继续在后台运行,请使用service

+0

你是什么意思?我不想保持我的应用程序在后台运行..我刚刚完成当前的活动,当应用程序在后台发送(如果主页按钮被点击) – androidBeginner

+0

我想你想让你的应用程序在后台运行。你的第一个问题对我来说不够清楚,对不起。现在我明白了你真正想做的事情。好的,把finish();在onpause()方法内,因为当用户点击主页按钮时,你的应用程序将调用onpause()方法。 – rutulPatel

2

Activity.onUserLeaveHint()如果由于用户操作(例如按主页按钮或切换应用)而导致活动停止后台,将触发您的活动。

+0

完美,这就是我正在寻找的 – androidBeginner

+1

sry刚刚检查...它不能正常工作......当另一个活动开始时也调用此方法 – androidBeginner

0

如果你想要做的,当按下HOME键和活动去的背景下,您可以覆盖此上的活动:

@Override 
public boolean onKeyUp(int keyCode, KeyEvent event) 
{ 
    switch(keyCode) 
    { 
    case KeyEvent.KEYCODE_HOME: 

    //somthing you want to do 

    default: 
     return super.onKeyUp(keyCode, event); 

    } 
} 

我使用KeyUp事件,因为这是当应用程序去化背景,用户可以做一个长按,我认为你不想在应用程序仍然打开时执行该方法。

0

这是一个作弊的答案,但我觉得它更可靠。

当您按下主页按钮时总是调用的一种方法是任何程序活动中包含的任何surfaceviewssurfacedestroyed方法。

把你想要执行的代码放到那里,让方法指向你想要执行的另一个方法,或者让方法触发一个指向你想要执行的方法的标志来完成这项工作。

相关问题