小编典典

Android - 如何覆盖“后退”按钮,使其不会完成()我的活动?

all

我目前有一个活动,当它显示时,通知也会显示在通知栏中。

这样当用户按下 home 并且 Activity 被推到后台时,他们可以通过 Notification 回到 Activity。

当用户按下后退按钮时会出现问题,我的 Activity 被破坏但通知仍然存在,因为我希望用户能够按下后退但仍然能够通过通知进入
Activity。但是当一个用户尝试这个时,我得到空指针,因为它试图开始一个新的活动,而不是带回旧的活动。

所以基本上我希望后退按钮与主页按钮完全相同,这是我迄今为止尝试过的方式:


        @Override
        public boolean onKeyDown(int keyCode, KeyEvent event)  {
            if (Integer.parseInt(android.os.Build.VERSION.SDK) < 5
                    && keyCode == KeyEvent.KEYCODE_BACK
                    && event.getRepeatCount() == 0) {
                Log.d("CDA", "onKeyDown Called");
                onBackPressed();
            }

            return super.onKeyDown(keyCode, event);
        }

        public void onBackPressed() {
            Log.d("CDA", "onBackPressed Called");
            Intent setIntent = new Intent(Intent.ACTION_MAIN);
            setIntent.addCategory(Intent.CATEGORY_HOME);
            setIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            startActivity(setIntent);

            return;
        }

但是上面的代码似乎仍然允许我的 Activity 被销毁,当按下后退按钮时,如何阻止我的 Activity 被销毁?


阅读 60

收藏
2022-06-20

共1个答案

小编典典

删除您的关键侦听器或true在您拥有KEY_BACK.

您只需要以下内容即可捕获返回键(确保不要调用 super in onBackPressed())。

此外,如果您打算让服务在后台运行,请务必查看startForeground()并确保有持续的通知,否则 Android 会在需要释放内存时终止您的服务。

@Override
public void onBackPressed() {
   Log.d("CDA", "onBackPressed Called");
   Intent setIntent = new Intent(Intent.ACTION_MAIN);
   setIntent.addCategory(Intent.CATEGORY_HOME);
   setIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
   startActivity(setIntent);
}
2022-06-20