3

アクティビティのスタックがあり、次のコードを使用してメインアクティビティを「アクティブ」状態にします。

Intent i = getBaseContext().getPackageManager()
.getLaunchIntentForPackage(getBaseContext().getPackageName());
i.putExtra("clearCache", true);
i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(i);

問題は、エクストラを取得しようとするとclearCache、を呼び出すとgetIntent().getExtras()nullが返されることです。

私の理解では、起動しているアクティビティはすでにスタック上にあり、Intent.FLAG_ACTIVITY_CLEAR_TOPフラグを設定しているため、返されるインテントは元のインテントになります。

起動しているアクティビティの呼び出しインテントにアクセスするにはどうすればよいですか?

4

2 に答える 2

4

FLAG_ACTIVITY_CLEAR_TOPのGoogleドキュメントでは、毎回新しいインテントを取得する必要があります。

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

..。

「上記の例で現在実行中のアクティビティBのインスタンスは、ここで開始している新しいインテントをonNewIntent()メソッドで受け取るか、それ自体が終了して新しいインテントで再起動します。起動モードが宣言されている場合は」 「複数」(デフォルト)で、同じインテントにFLAG_ACTIVITY_SINGLE_TOPを設定していない場合は、終了して再作成されます。他のすべての起動モードの場合、またはFLAG_ACTIVITY_SINGLE_TOPが設定されている場合、このインテントは現在のインスタンスのonNewIntent()に配信されます。 。」

詳細については、こちらをご覧ください。

http://developer.android.com/reference/android/content/Intent.html#FLAG_ACTIVITY_CLEAR_TOP

お役に立てば幸いです。

于 2013-03-25T14:15:48.387 に答える
0

特定のアクティビティ名を渡してコードを変更し、残りのコードをそのままにしておくだけです。

Intent i = new Intent(MapActivity.this, MainActivity.class);
                        i.putExtra("clearCache", true);
                        i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                        startActivity(i);
于 2013-03-25T14:25:22.140 に答える