我可以覆盖我的应用程序中的“主页”button吗?

我想在我的android上创build我自己的“家”屏幕,我想从我的应用程序调用该主屏幕。

我怎样才能覆盖“主页”button,以便当它被按下时,应用程序将被redirect到我的主屏幕,而不是默认的主屏幕? 是否有可能重写主页button?

Solutions Collecting From Web of "我可以覆盖我的应用程序中的“主页”button吗?"

嗨再次您可以覆盖主页button作为任何其他button:

@Override public boolean onKeyDown(int keyCode, KeyEvent event) { if ((keyCode == KeyEvent.KEYCODE_HOME)) { Toast.makeText(this, "You pressed the home button!", Toast.LENGTH_LONG).show(); return true; } return super.onKeyDown(keyCode, event); } 

覆盖下面的方法。

 @Override public void onAttachedToWindow() { Log.i("TESTE", "onAttachedToWindow"); this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD); super.onAttachedToWindow(); } 

使用此方法,HOMEbutton停止在此活动中工作(仅此活动)。 然后你只需重新实现,因为这是一个正常的button事件(例如后退button)。

 public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_HOME) { Log.i("TESTE", "BOTAO HOME"); return true; } return super.onKeyDown(keyCode, event); } 

AndroidManifest.xml

 <activity ... android:launchMode="singleTask"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> <category android:name="android.intent.category.HOME" /> <category android:name="android.intent.category.DEFAULT" /> .... </intent-filter> </activity> 

你需要launchMode="singleTask"所以意图被传递到已经运行的应用程序,而不是创build一个新的实例。

在活动中:

  @Override protected void onNewIntent(Intent intent) { super.onNewIntent(intent); if (Intent.ACTION_MAIN.equals(intent.getAction())) { Log.i("MyLauncher", "onNewIntent: HOME Key"); } } 

你没有得到一个关键的事件

主页button应该只做一件事,一件事而且始终如一。 让用户回到主屏幕。 即使你可以覆盖它的行为,这将是一个非常用户不友好的事情。 所以不要这样做,以不同的方式解决你的问题!

不,我们不能重写主页button,但我资助这个….的解决scheme:

 public boolean isApplicationSentToBackground(final Context context) { ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE); List<ActivityManager.RunningTaskInfo> tasks = am.getRunningTasks(1); if (!tasks.isEmpty()) { ComponentName topActivity = tasks.get(0).topActivity; if (!topActivity.getPackageName().equals(context.getPackageName())) { return true; } } return false; } @Override public void onStop() { if (isApplicationSentToBackground(this)){ //put your code here what u want to do } super.onStop(); } 

更改为清单文件 –

 <uses-permission android:name="android.permission.GET_TASKS" /> 

试试这个活动

 @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case android.R.id.home: onBackPressed(); break; default: return super.onOptionsItemSelected(item); } return false; }