调用方法当在主页上按下android

所以我在我的一个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); } 

但是,即使KEYCODE_HOME有效,日志方法也不会触发。 这适用于后退button。 有谁知道这是为什么,以及如何得到这个工作?

谢谢

主页button是一个非常危险的button来覆盖,因此,Android不会让你重写它的行为,就像你做BACKbutton一样。

看看这个讨论。

您会注意到主页button似乎是作为一个意图调用来实现的,所以您最终不得不为活动添加一个意图类别。 然后,任何时候用户点击回家,您的应用程序将显示为一个选项。 你应该考虑你想用homebutton来完成什么。 如果它不取代设备的默认主屏幕,我会担心重载HOMEbutton,但是这是可能的(在上面的线程讨论)。

我花了差不多一个月的时间来解决这个问题。 刚才我解决了这个问题。 在你的活动的onPause()你必须包括以下条件:

  if (this.isFinishing()){ //Insert your finishing code here } 

函数isFinishing()返回一个布尔值。 如果您的应用程序实际上正在closures,则为True,如果您的应用程序仍在运行,则为False,例如屏幕closures。

希望能帮助到你!

我发现当按下HOMEbutton时,onStop()方法被调用。您可以使用下面的一段代码来监视它:

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

HOMEbutton不能被应用程序拦截。 这是Android中的一个devise行为。 原因是为了防止恶意应用程序获得对手机的控制权(如果用户无法按回或回家,他可能永远无法退出应用程序)。 主页button被认为是用户的“安全区域”,并将始终启动用户configuration的家庭应用程序。

上述唯一例外是任何configuration为家庭替代的应用程序。 这意味着它在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> 

当按Home键,当前的家庭应用程序的活动onNewIntent将被调用。

我有一个简单的解决scheme,处理主页button按下。 这是我的代码,它可以是有用的:

 public class LifeCycleActivity extends Activity { boolean activitySwitchFlag = false; @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if(keyCode == KeyEvent.KEYCODE_BACK) { activitySwitchFlag = true; // activity switch stuff.. return true; } return false; } /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); } @Override public void onPause(){ super.onPause(); Log.v("TAG", "onPause" ); if(activitySwitchFlag) Log.v("TAG", "activity switch"); else Log.v("TAG", "home button"); activitySwitchFlag = false; } public void gotoNext(View view){ activitySwitchFlag = true; startActivity(new Intent(LifeCycleActivity.this, NextActivity.class)); } } 

作为一个总结,在活动中放置一个布尔值,当发生活动切换时(startactivity事件),设置variables并在onpause事件中检查这个variables。

使用onPause()方法来做你想做的主页button。

KeyEvent.KEYCODE_HOME不能被拦截。

如果可能的话,这将是相当糟糕的。

(编辑) :我只是看到尼克斯的答案,这是完全完整的;)

我也努力与HOMEbutton一段时间。 当用户点击HOMEbutton时,我想停止/跳过后台服务(轮询位置)。

这是我实施的“黑客”解决scheme;

使用布尔值保持SharedPreferences上的应用程序状态

对每个活动

onResume() – >设置appactive = true

onPause() – >设置appactive = false

后台服务在每个循环中检查appstate,跳过这个动作

如果appactive = false

它适用于我,至less不会耗尽电池,希望这可以帮助….