2016-06-21 20 views
1

ブロードキャスト受信者操作の後に私のアプリケーションを開く必要があります。しかし、私のアプリが現時点で開かれていれば、以前のMainActivityを削除し、新しいMainActivityを作成する必要があります。どのように放送受信機からMainActivityを開始し、以前のMainActivityを削除するか?ブロードキャスト受信者の後の2つの主な活動

放送:

Intent initialIntent = context.getPackageManager().getLaunchIntentForPackage("com.cc.dd"); 
    initialIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP); 
    initialIntent.putExtra(Constants.NUMBER,getIncomingNumber(mCallState)); 
    context.startActivity(initialIntent); 

私はフラグを使用しようとしましたが、私は奇妙なログを持っている:

D/CallReceiver:メイン:[RINGING]
D/CallReceiver:メイン:[着信をtrue]
D/MainActivity:メイン:[ON_PAUSE]
D/MainActivity:メイン:[ON_CREATE]
D/MainActivity:メイン:[ON_START]
D/MainActivity:メイン:[ON_RESUME]

私はMainActivity以前のバージョンはonPauseと新しいバージョンの開始に行く参照してください。なぜ以前のバージョンでは削除されないのですか?

+1

「android:launchMode = "singleInstance"」をマニフェストのアクティビティタグに追加できます。それはあなたの活動が一度だけ開かれることを保証します.... – Opiatefuchs

+0

あなたが直面している問題は何ですか –

+0

したがって、以前のすべての活動を殺すには、これらの方法に従ってください。 APIレベル11以上では、インテントのFLAG_ACTIVITY_CLEAR_TASKフラグとFLAG_ACTIVITY_NEW_TASKフラグを使用して、すべてのアクティビティスタックをクリアします。 initialIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK |インテント.FLAG_ACTIVITY_NEW_TASK); もう一つの方法は、アンドロイド:launchMode = "singleInstance" Opiatefuchsの発言です。 – YLS

答えて

3

アクティビティのライフサイクルを終了するには、finish()を呼び出す必要があります。次のコードは、単純に現在の活動を再開します。

Intent intent = getIntent(); 
finish(); 
startActivity(intent); 

または

Intent intent = new Intent(YourActivity.this,YourActivity.class); 
startActivity(intent); 
finish(); 

参考文献:

0

I以前の活動を削除できないと思っています。あなたの活動にフラグsingleInstanceを追加できます。

1

あなたは、単に追加することができます。

android:launchMode = "singleInstance" 

マニフェストであなたのアクティビティタグに。それはあなたの活動が一度だけ開かれることを保証します。例:

<activity 
android:name=".YourActivity" 
android:label="@string/your_activity_name" 
android:launchMode = "singleInstance" /> 
関連する問題