【发布时间】:2014-04-08 16:17:15
【问题描述】:
是否可以覆盖我的默认手机“返回”按钮?我想在我的手机后退按钮单击上结束应用程序。我该怎么做?谢谢!
【问题讨论】:
是否可以覆盖我的默认手机“返回”按钮?我想在我的手机后退按钮单击上结束应用程序。我该怎么做?谢谢!
【问题讨论】:
每个 Activity 都有一个方法,基本上就是你 android 上的后退按钮。当然,这种方法是“可覆盖的”。
把它放在你的活动中:
@Override
public void onBackPressed() {
//do whatever
}
要完成活动,请在上面重写的方法中编写:
finish();
要完成应用程序,请在上面的重写方法中编写:
android.os.Process.killProcess(android.os.Process.myPid());
编辑: 我假设您也希望它不会出现在您最近的应用程序中。 结合使用我前面提到的“android.os.process...”,将它放在 root 活动的活动标记中的 android 清单中。
android:excludeFromRecents="true"
所以它看起来像这样:
<activity
name:=blah
...
android:excludeFromRecents="true"
>
...
...
</activity>
我使用了这个和 android.os.process.killprocess 并且它有效。该应用停止并且没有显示在我最近的应用中(这也是假设您想要的)。
【讨论】:
是的,您可以在启动意图时使用FLAG_ACTIVITY_CLEAR_TOP 标志来清除以前的所有活动。因此,当用户按下“返回”时,它将关闭应用程序。
Intent intent = new Intent(this, NewTop.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
如果设置,并且正在启动的活动已经在 当前任务,而不是启动该任务的新实例 活动,除此之外的所有其他活动都将关闭,并且 此 Intent 将作为 新意图。
例如,考虑一个由以下活动组成的任务:A、B、C、D。 如果 D 调用 startActivity() 的 Intent 解析为 活动 B 的组成部分,然后 C 和 D 将完成,B 收到 给定的 Intent,导致堆栈现在是:A,B。
上例中当前正在运行的活动 B 实例将 要么接收您从这里开始的新意图 onNewIntent() 方法,或者自己完成并使用新的重新启动 意图。如果它已将其启动模式声明为“多重”( 默认值)并且您没有设置 FLAG_ACTIVITY_SINGLE_TOP 相同 意图,然后它将完成并重新创建;对于所有其他发射 模式或者如果设置了 FLAG_ACTIVITY_SINGLE_TOP 那么这个 Intent 将是 传递到当前实例的 onNewIntent()。
这种启动模式也可以配合使用效果很好 FLAG_ACTIVITY_NEW_TASK:如果用于启动任务的根活动, 它将将该任务的任何当前正在运行的实例带到 前台,然后将其清除为根状态。这尤其 有用,例如,在从通知启动活动时 经理。
此外,如果您不知道每次用户按下后退按钮,onBackPressed 会被调用,因此如果您想做一些不同的事情,请覆盖它(但是,您仍然应该使用我上面所说的方式来做你想要)。
【讨论】:
很有帮助 Android - How To Override the "Back" button so it doesn't Finish() my Activity?
您正在查看使用 android onKeyDown 方法并捕获后退按钮按下。 http://developer.android.com/reference/android/app/Activity.html#onKeyDown
一旦你完成了你想要获取应用程序上下文和finish()。
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
getApplicationContext().finish();
return true;
}
return super.onKeyDown(keyCode, event);
}
注意事项:
【讨论】:
覆盖
@Override
onBackPressed()
{
}
在您的活动中并在此方法中执行您的操作,当用户按下返回按钮时将调用它
【讨论】: