2013-07-25 10 views
9

私のアンドロイドアプリのユーザーは、特定のアクティビティで戻るときに自分のアプリを離れることができます。これはできますか?戻るボタン付きアンドロイドアプリを離れる

+0

共有プレフィックスのアクティビティの状態を保存します – KOTIOS

+0

あなたの活動の流れを説明する方が良いでしょう – stinepike

+0

あなたはアプリを完全に終了し、貴重な活動に戻らないことを意味しますか? –

答えて

6

あなたはこのような何かを試すことができますが(終了を確認するダイアログが表示されます)お勧めしません。より正しい「正しい」方法は、おそらく、押されたときに意図をブロードキャストすることであり、アプリケーションのアクティビティがその意図を受け取った場合は、自分自身で終了します。

+0

これは単に戻るボタンのような以前の活動に彼を戻すのではないでしょうか? http://developer.android.com/reference/android/app/Activity.html#finish() –

+0

は、私の回答 –

+4

をSystem.exit(0)を使用して編集しました。なぜあなたがする必要があるかわからない限り、アドバイスされていません.. –

0

[戻る]ボタンを無効にすると、何かを達成できます。

 @Override 
     public void onBackPressed() { 
        new AlertDialog.Builder(this).setIcon(android.R.drawable.ic_dialog_alert).setTitle("Exit") 
          .setMessage("Are you sure you want to exit?") 
          .setPositiveButton("Yes", new DialogInterface.OnClickListener() { 
           @Override 
           public void onClick(DialogInterface dialog, int which) { 
            finish(); 
            System.exit(0); 
           } 
          }).setNegativeButton("No", null).show(); 
       } 

それは注意しなければならない、それがその出アプリの下のコメントに記載されているようにSystem.exitがあると:

@Override 
public boolean onKeyDown(int keyCode, KeyEvent event) { 
    if (keyCode == KeyEvent.KEYCODE_BACK) { 
     // Do whatever you want with your activity 
     // And for closing the whole app, you can use System.exit() which is absolutely not recomended 
     return true; 
    } 
    return super.onKeyDown(keyCode, event); 
} 
+1

私はそれがOPに答えているとは思わないアプリを離れる方法についての質問。 – alex

+0

なぜonBackPressed()を使用しないのですか? –

7

良い方法は、あなたが活動のonBackPressed()をオーバーライドして、あなたがそれでやりたいことができますバック

private boolean    _doubleBackToExitPressedOnce = false; 

@Override 
public void onBackPressed() { 

    Log.i(TAG, "onBackPressed--"); 
    if (_doubleBackToExitPressedOnce) { 
     super.onBackPressed(); 
     return; 
    } 
    this._doubleBackToExitPressedOnce = true; 
    Toast.makeText(this, "Press again to quit", Toast.LENGTH_SHORT).show(); 
    new Handler().postDelayed(new Runnable() { 
     @Override 
     public void run() { 

      _doubleBackToExitPressedOnce = false; 
     } 
    }, 2000); 
} 
+1

これは、ユーザーエクスペリエンスを完全に破壊するので、恐ろしい方法です。 Backを押したときにダイアログをポップアップするよりも少し面倒ですが。 – ge0rg

+2

これは、よく知られているアプリやそのような人々に使用されています。ポップアップ(はい/いいえ)よりも束縛されず、ユーザーにシンプルな選択肢を与えます –

+1

はい、残念です。 Android上の多くのアプリでUXが壊れていますが、引き続きユーザーに推奨する理由はありません。選択については、ユーザーは既にプッシュバックしたときに現在のアクティビティを終了することを選択しました。それらを混同する必要はありません。 – ge0rg

2

秒待つことです。あなたはこの1

public void onBackPressed() { 
    moveTaskToBack(true); 
} 
+0

System.exit(0)を使用します。 onbackpressedで – ashokk

6

バックボタンの目的を破ると予想されるでしょうあなたが求めているものと思われる:ここに戻って押されたときにアプリを終了コードがありますアプリケーションのフロー。ユーザは、戻るボタンを押すと、それらを前の活動画面に戻すことを期待する。

アプリケーション全体を戻るボタンで終了する場合は、startActivity()を使用するたびにfinish()を呼び出します。これにより、ユーザーが戻るボタンを押したときにアプリケーションを終了するので、現在のアクティビティが終了します。

2

を試すことができます

@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); 
} 
+0

ホーム画面からログイン画面に戻る、またはスプラッシュ画面に戻るなど、以前のアクティビティ画面に戻ることがない場合があります。 –

5

あなたのマニフェストのすべての活動の中に入れて:バックプレスで

<activity android:name=".MyActivity" 
      android:noHistory="true"> 
</activity> 

をごActivityから:

@Override 
protected void onBackPressed() { 
    if (this.isFinishing()){ 
     finish(); 
     super.onBackPressed(); 
    } 
} 
2

代わりの戻るボタンの動作を制御するFLAG_ACTIVITY_CLEAR_TOP意思フラグを使用することを検討して上書きをアプリケーションのアクティビティスタック。

設定され、起動されているアクティビティがすでに現在のタスクで実行されている場合、そのアクティビティの新しいインスタンスを起動する代わりに、その上にある他のアクティビティはすべて閉じられ、このインテントは新しいインテントとして(現在のトップに)古いアクティビティに配信されます。

たとえば、アクティビティA、B、C、Dからなるタスクを考えてみましょう。アクティビティBのコンポーネントを解決するインテントでDがstartActivity()を呼び出した場合、CとDは終了し、B与えられたインテントを受け取ると、スタックはA、Bになります。

上記の例を使用してください。私はバックプレスでアプリを残すために、このメソッドを使用し

Intent intent = new Intent(context, B.class); 
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
startActivity(intent); 
1

:活動Dから :このような何かを実装することになるすべての

@Override 
public void onBackPressed() { 
enter code here 
    finish(); 
} 
+0

これはアプリを終了しません。ちょうど現在の活動 –

2

最初に、あなたが望むことを完全に奇妙です通常、ユーザーがあなたのアプリを離れる場合、アンドロイドが残りの部分を処理し、デバイスのメモリ状態に基づいてデバイスを閉じたり、一時停止したりすることを決めるため、アプリケーションを閉じることができます。それについて。

アプリを終了したい場合は、アクティビティが1つしか実行されていない場合(ケースに戻るボタンを押した時点で)、そのアクティビティを閉じるとアプリケーション全体が閉じられます。つまり、意図を使って現在のアクティビティに送信し、以前のアクティビティを終了しなかった場合、this.finish()を使用すると、現在のアクティビティが閉じられ、以前の一時停止したアクティビティが戻されます。そうしないと、アプリケーション全体が閉じられます。 アクティビティがフラグメントを使用し、フラグメントがレイアウトなしである可能性があるという事実を考慮してください。それはまだ実行中にアプリケーションが閉じているようです。

しかし、ハードウェアのバックキーを使って仕事をするにはどうすればいいですか?私は、これは古い記事ですけど、この

@Override 
public void onBackPressed() 
{ 
    if(/* check a condition to make sure you are in that certain activity */) 
    { 
     Process.killProcess(Process.myPid()); 
    } 
    else 
    { 
     super.onBackPressed(); 
    } 
} 

幸運

2

を行う必要があります。しかし、これは自分のアプリケーションに同じ機能を実装したいと思っていたときと同じように、誰かにとって役に立ちます。

ダブルバックを識別するソリューションは、2回のバックプレスの間の時間を計算することによって実行できます。差が2秒(すなわち、2000ミリ秒)未満である場合は、それをダブルバックプレスとして受け入れ、アプリケーションから終了することができる。それ以外の場合は、トーストメッセージを表示します。

本のシンプルな実装は次のようになります。

private static long back_pressed; 

@Override 
public void onBackPressed() 
{ 
     if (back_pressed + 2000 > System.currentTimeMillis()) 
      super.onBackPressed(); 
     else 
      Toast.makeText(getBaseContext(), "Press once again to exit!",Toast.LENGTH_SHORT).show(); 

     back_pressed = System.currentTimeMillis(); 
} 

コードは、ここでは、このlink

0
@Override 
    public void onBackPressed(){ 
     new AlertDialog.Builder(this).setIcon(android.R.drawable.ic_dialog_alert).setTitle("Exit") 
     .setMessage("Are you sure you want to exit?") 
     .setPositiveButton("Yes", new DialogInterface.OnClickListener() { 
      @Override 
      public void onClick(DialogInterface dialog, int which) { 
       Intent intent = new Intent(Intent.ACTION_MAIN); 
        intent.addCategory(Intent.CATEGORY_HOME); 
        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
        startActivity(intent); 
      } 
     }).setNegativeButton("No", null).show(); 

    } 
0

で見つけることができbackPressedを(管理するための準備方法です)一度に2回押すときと確認ダイアログを呼び出してください:

関連する問題