1. ホーム

[解決済み】戻るボタンをホームボタンのように動作するように上書きする

2022-04-06 19:29:02

質問

戻るボタンを押すと、アプリケーションが破壊された状態ではなく、停止した状態になるようにしたいのですが、どうすればいいですか?

Androidでは ドキュメント と記載されています。

...すべてのアクティビティが、BACKが押されたときに破壊されるという動作を持っているわけではありません。ユーザーがMusicアプリケーションで音楽の再生を開始し、BACKボタンを押すと、アプリケーションは通常のBACK動作を上書きし、プレーヤーアクティビティが破壊されるのを防ぎ、そのアクティビティが見えなくなったとしても、音楽の再生を継続します。

この機能を自分のアプリケーションで再現するには?

3つの可能性があると思うのですが......。

  1. 戻るボタンが押されたことを捕捉し(以下のように)、次にホームボタンが呼び出す何らかのメソッドを呼び出します。

    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if ((keyCode == KeyEvent.KEYCODE_BACK)) {
            Log.d(this.getClass().getName(), "back button pressed");
        }
        return super.onKeyDown(keyCode, event);
    }
    
    
  2. バックボタン押下をキャプチャし、ホームボタン押下を偽装する。

  3. バックボタンが押されたところをキャプチャして、ホーム画面のActivityを開始し、私のアプリケーションのActivityを効果的に停止状態にします。

編集する。 私はサービスについて知っており、この問題に関連するアプリケーションでそのサービスを使用しています。この質問は、特に、戻るボタンを押したときにアクティビティを破壊状態ではなく、停止状態にすることについてです。

どのように解決するのですか?

ほとんどの場合 サービス を使用してバックグラウンドで何かを実行し、目に見える形で Activity は、単にこの Service . (ミュージックプレイヤーも同じように動作すると思うので、docsの例は少し誤解を招きそうです)。もしそうなら、あなたの Activity できる finish は通常通り、そして Service はまだ実行中です。

よりシンプルな方法としては Back ボタンが押され moveTaskToBack(true) を次のようにします。

// 2.0 and above
@Override
public void onBackPressed() {
    moveTaskToBack(true);
}

// Before 2.0
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_BACK) {
        moveTaskToBack(true);
        return true;
    }
    return super.onKeyDown(keyCode, event);
}

私は、Activityが正常に終了し、必要に応じてServiceから現在の状態を読み込むなどして自分自身を再作成できることが望ましいと思います。しかし moveTaskToBack は、時折、迅速な代替案として使用することができます。

ノート : 以下のDaveの指摘のように、Android 2.0では新しい onBackPressed メソッド、および これらの推奨事項 戻るボタンの処理方法について。