2017-08-16 12 views
0

私はアンドロイドで開発することを学んでおり、あなたの助けが必要です。私は最後のアクティビティでは、それが開いて私のアプリに戻り、私はLAUNCHER活動で開くwhantとき、これは私が私のアプリを閉じるために使用するものである ...アプリを終了してランチャーで開く

boolean twice; 

@Override 
public void onBackPressed() { 
    if(twice) { 
     Intent intent = new Intent(Intent.ACTION_MAIN); 
     intent.addCategory(Intent.CATEGORY_HOME); 
     intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
     startActivity(intent); 
     finish(); 
     System.exit(0); 
    } 
    twice = true; 
    toastMessage(getResources().getString(R.string.msg0a)); 
    new Handler().postDelayed(new Runnable() { 
     @Override 
     public void run() { 
      twice = false; 
     } 
    }, 2000); 
} 

問題があります。

編集理由:これは、ユーザーがアカウントからログアウトして、ログインアクティビティの運命を持つことができるアクティビティです。ログアウト後、ユーザーが私のアプリを開くとき、彼はログインしていない間に何度も何度もログイン活動に渡る必要があります。

+0

単純に呼び出し終了(); inside onBackPressed() –

+0

@ dcd4u2:あなたはどのようにアプリに戻ってくるのか教えていただけますか?自宅や最近の画面でアプリのアイコンを使用しますか? – AndiGeeky

+0

@AndiGeeky:はい、自宅のアイコンを介して。 – dcd4u2

答えて

1

Activity, Tasks and Back stack works in Androidを実行する必要があります。今

私はあなたの質問から右想定していた場合のは、あなたのシナリオで作業しましょう、あなたが望むものである:

    ユーザータップ「は、二回」アンドロイドで戻る ボタンの上に、閉じたい
  1. アプリ。
  2. ユーザーが

    • 更新ムービーからアプリのホーム画面からランチャーまたは、

    • をタップする、ことにより、あなたのアプリケーションに戻ってきたときに、アプリを閉じた後

解決策: CLEAR_TASKフラグとNEW_TASKフラグ、および送信先アクティビティを「ランチャーアクティビティ」としてインテントを作成します。

TransparentActivity.java

public class TransparentActivity extends AppCompatActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     int flag = (getIntent().getFlags() & Intent.FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY); 
     if (Intent.FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY == flag) { 
      PackageManager pm = getPackageManager(); 
      Intent intent = pm.getLaunchIntentForPackage(getPackageName()); 
      getApplication().startActivity(intent); 
     } 

     finish(); 
    } 
} 

ApplicationUtils.java

public static void kill(Context context) { 
     Intent intent = new Intent(context, TransparentActivity.class); 
     intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NO_HISTORY); 
     context.startActivity(intent); 
    } 

ちょうどあなたのアプリを終了するには、線の下に呼び出し:呼び出しの上

ApplicationUtils.kill(); 

アプリを殺すだろう上記のいずれかのオプションから起動すると、ランチャーから起動します。 :)

+0

Wonderfull、それは魅力のように機能します。ありがとう、AndiGeeky! – dcd4u2

+0

@ dcd4u2:ようこそ! – AndiGeeky

2

System.exit(0);を絶対に呼び出さないことを強くお勧めします。あなたのアプリケーションを強制終了する必要がある場合は、Androidに処理させる必要があります。

これを試してみると、バックプレス間の遅延を制御でき、非常に読みやすくなります。

// Time in millis between presses. 
private final static int BACK_EXIT_DELAY = 2000; 

private long backLastPress = 0; 

@Override 
public void onBackPressed() { 
    long now = System.currentTimeMillis(); 
    if(now - backLastPress < BACK_EXIT_DELAY) { 
     finish(); 
    } else { 
     Toast.makeToast(this, "Press back again to exit.", Toast.LENGTH_SHORT).show(); 
     backLastPress = now; 
    } 
} 
関連する問題