web-dev-qa-db-ja.com

android戻るボタンを押すとアプリが終了します

ユーザーがインテントの戻るボタンを押すと、アプリケーションは終了します。戻るボタンが押されたときにアプリケーションを確実に終了するにはどうすればよいですか?

41
d-man

startActivityを使用して新しいアクティビティを開始した直後に、finish()を呼び出して、現在のアクティビティが新しいアクティビティの背後にスタックされないようにしてください。

[〜#〜] edit [〜#〜]コメントに関して:

あなたが提案しているのは、特にAndroidアプリフローが通常どのように機能するか、そしてユーザーがどのように機能することを期待するかです。あなたがcan本当にしたい場合は、そのアクティビティに至るすべてのstartActivitystartActivityForResultであり、終了コードをチェックするonActivityResultリスナーを持っていることを確認することです。 詳細はこちら 。基本的に、アクティビティを終了する前にsetResultを使用して、選択した終了コードを設定し、親アクティビティがその終了を受信した場合コード、thatアクティビティで設定し、そのアクティビティを終了するなど.

43
David Hedlund

私のホームアクティビティでは、「onBackPressed」を次のようにオーバーライドします。

@Override
public void onBackPressed() {
   Intent intent = new Intent(Intent.ACTION_MAIN);
   intent.addCategory(Intent.CATEGORY_HOME);
   intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
   startActivity(intent);
 }

そのため、ユーザーがホームアクティビティに戻って押すと、ホーム画面に移動します。

プログラムでホーム画面に移動する からコードを取得しました

87
Hugo Matilla

ユーザーエクスペリエンスの向上:

/**
 * Back button listener.
 * Will close the application if the back button pressed twice.
 */
@Override
public void onBackPressed()
{
    if(backButtonCount >= 1)
    {
        Intent intent = new Intent(Intent.ACTION_MAIN);
        intent.addCategory(Intent.CATEGORY_HOME);
        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        startActivity(intent);
    }
    else
    {
        Toast.makeText(this, "Press the back button once again to close the application.", Toast.LENGTH_SHORT).show();
        backButtonCount++;
    }
}
29
Vlad Spreys

ユーザーがホームボタンを押していないのはなぜですか?その後、特定のアクティビティだけでなく、アクティビティからアプリを終了できます。

あなたのアプリケーションがバックグラウンドで何かを続けることを心配している場合。関連するonPauseおよびonStopコマンド(ユーザーがHomeを押すとトリガーされます)で必ず停止してください。

次回ユーザーがアプリをクリックして最初からやり直したいという問題がある場合は、ユーザーをアプリの開始アクティビティに戻すための何らかのメニュー項目またはUIボタンを画面に配置することをお勧めしますアプリ。公式TwitterアプリのTwitterの鳥など.

2
Eric

アプリは、バックスタックにアクティビティがない場合にのみ終了します。 SOマニフェストにこの行を追加しますAndroid:noHistory = "true"バックスタックしたくないすべてのアクティビティに追加します。その後、アプリ呼び出しを閉じますOnBackPressedのfinish()

<activity Android:name=".activities.DemoActivity"
            Android:screenOrientation="portrait"
            **Android:noHistory="true"**
            />
2
Sagar Devanga

onBackPressedmethodを使用

@Override
public void onBackPressed() {
    finish();
    super.onBackPressed();
}

これで問題が解決します。

2
Akila

Androidアプリから終了するには、単にメインアクティビティで使用します。または、Androidマニフェストファイルを使用して設定します。

Android:noHistory="true"
1
Uday Shah

まず、Androidは、戻るボタン内で行うことをお勧めしませんが、提供されているライフサイクルメソッドを使用することをお勧めします。戻るボタンはアクティビティを破棄しないでください。

UIスタックの最後の残りのアクティビティで戻るボタンを押すと、概要(5.0でマテリアルデザインが導入されたため、四角ボタン)からアクセスできるアクティビティがスタックに追加されます。ユーザーがアプリを閉じたい場合は、[概要]メニューからアプリをスワイプ(閉じる)する必要があります。

OnPause()、onStop()、およびonDestroy()のライフサイクルメソッドで、実行したくないバックグラウンドタスクとジョブを停止するのはアプリの責任です。ライフサイクルとその適切な実装の詳細については、こちらをご覧ください: http://developer.Android.com/training/basics/activity-lifecycle/stopping.html

しかし、あなたの質問に答えるには、hacksを実行して正確な動作を実装することができますしかし、私が言ったように、それは推奨されません

@Override
 public void onBackPressed() {

// make sure you have this outcommented
// super.onBackPressed();
 Intent intent = new Intent(Intent.ACTION_MAIN);
 intent.addCategory(Intent.CATEGORY_HOME);
 intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
 startActivity(intent);
}
1
captainserious

メソッドfinish() onBack method of your current_activityを使用してcurrent_activityを終了します

次に、force_closeを削除するためのcurrent_activityのonDestroyに以下の行を追加します

@Override
public void onDestroy()
{
    Android.os.Process.killProcess(Android.os.Process.myPid());
    super.onDestroy();
}
0
Naveed Ahmad

@Vlad_Spaysの回答を変更して、スタックの最後のアイテムでない限り、戻るボタンが正常に機能するようにし、アプリを終了する前にユーザーにプロンプ​​トを表示します。

@Override
public void onBackPressed(){
    if (isTaskRoot()){
        if (backButtonCount >= 1){
            Intent intent = new Intent(Intent.ACTION_MAIN);
            intent.addCategory(Intent.CATEGORY_HOME);
            intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            startActivity(intent);
        }else{
            Toast.makeText(this, "Press the back button once again to close the application.", Toast.LENGTH_SHORT).show();
            backButtonCount++;
        }
    }else{
        super.onBackPressed();
    }
}
0