1. ホーム
  2. アンドロイド

[解決済み】Android - 「戻る」ボタンをオーバーライドして、アクティビティをFinish()しないようにするには?

2022-04-09 05:33:14

質問

現在、アクティビティが表示されると、通知バーにも通知が表示されるようにしています。

これは、ユーザーがホームを押してアクティビティがバックグラウンドに押されたとき、通知を介してアクティビティに戻れるようにするためです。

問題は、ユーザーが戻るボタンを押したときに、アクティビティは破壊されますが、Notificationは残ることです。しかし、ユーザーがこれを試すと、古いものを戻すのではなく、新しいアクティビティを開始しようとするため、Nullポインタが表示されます。

そこで、基本的には「戻る」ボタンを「ホーム」ボタンと全く同じように動作させたいのですが、これまでに試した方法は以下のとおりです。


        @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;
        }   


しかし、上記のコードではまだアクティビティが破壊されてしまうようです。どうすれば、戻るボタンが押されたときにアクティビティが破壊されないようにできますか?

解決方法は?

キーリスナーを削除するか true がある場合 KEY_BACK .

バックキーをキャッチするために必要なのは、以下のとおりです。 スーパー 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);
}