【问题标题】:Override default phone back button覆盖默认电话返回按钮
【发布时间】:2014-04-08 16:17:15
【问题描述】:

是否可以覆盖我的默认手机“返回”按钮?我想在我的手机后退按钮单击上结束应用程序。我该怎么做?谢谢!

【问题讨论】:

    标签: android eclipse button


    【解决方案1】:

    每个 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 并且它有效。该应用停止并且没有显示在我最近的应用中(这也是假设您想要的)。

    我从Android - Remove application from Recent Apps得到这个答案

    【讨论】:

    • OnBackPressed 效果很好,但是 android.os.Process.killProcess(android.os.Process.myPid());不起作用,它的行为类似于 finish();
    • 您的意思是您不希望您的应用显示在您的“最近的应用”中吗?我已经编辑了这篇文章。我认为其他人的答案比我更好。
    【解决方案2】:

    是的,您可以在启动意图时使用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 会被调用,因此如果您想做一些不同的事情,请覆盖它(但是,您仍然应该使用我上面所说的方式来做你想要)。

    【讨论】:

      【解决方案3】:

      很有帮助 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);
      }
      

      注意事项:

      • 此类必须扩展活动,这是访问后退按键方法所必需的。
      • 您的代码中可能有类似 Context context = getActivityContext() 之类的内容,这不是正确的上下文,因为结束此上下文只会关闭堆栈顶部的活动
      • 不应执行终止进程在这种情况下,它是为了强制关闭应用程序。确保完成,这意味着所有必要的内容都已保存,应用程序可以自然结束而不是强制结束。

      【讨论】:

        【解决方案4】:

        覆盖

         @Override
            onBackPressed()
            {
            }
        

        在您的活动中并在此方法中执行您的操作,当用户按下返回按钮时将调用它

        【讨论】:

          猜你喜欢
          • 2012-03-21
          • 2021-10-25
          • 1970-01-01
          • 2011-09-06
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-05-28
          • 1970-01-01
          相关资源
          最近更新 更多