11

Inside a broadcast receiver I want to start my app (Activity) and pass in some data.

My problem is that the extras don't seem to carry over into the activity. I am trying to get the data inside the onNewIntent(Intent i) function.

Any ideas?

Here is my current attempt in the BroadcastReceiver:

Intent intSlider = new Intent();
intSlider.setClass(UAirship.shared().getApplicationContext(), SliderMenuActivity.class);
intSlider.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

intSlider.putExtra("action", ScreensEnum.Object);
intSlider.putExtra("objectId", objectId);
intSlider.putExtra("objectCode", objectCode);
intSlider.putExtra("userId", userId);

UAirship.shared().getApplicationContext().startActivity(intSlider);

EDIT - Added code used in onNewIntent() and onCreate()

The following code works great in onCreate() when the app isn't currently running. For when the app is already running the same code doesn't work (i.e. no extras) from the onNewIntent() function.

Intent intent = getIntent();

if(intent.hasExtra("objectId")) {

    loadDetail(intent.getStringExtra("objectId"), "2w232");
}
4

5 に答える 5

12

問題はgetIntent()方法です。最新のインテントではなく、アクティビティを開始したインテントを常に返します。onNewIntentメソッドに引数として渡されたインテントを使用する必要があります。

于 2013-03-11T17:16:57.957 に答える
1

ドキュメントからの抜粋

これは、パッケージで launchMode を「singleTop」に設定するアクティビティに対して、またはクライアントが startActivity(Intent) を呼び出すときに FLAG_ACTIVITY_SINGLE_TOP フラグを使用した場合に呼び出されます。いずれの場合も、アクティビティの新しいインスタンスが開始されるのではなく、アクティビティ スタックの一番上にあるときにアクティビティが再起動されると、再起動に使用されたインテントを使用して既存のインスタンスで onNewIntent() が呼び出されます。それ。

アクティビティは、新しいインテントを受け取る前に常に一時停止されるため、このメソッドの後に onResume() が呼び出されることを期待できます。

getIntent() は引き続き元の Intent を返すことに注意してください。setIntent(Intent) を使用して、この新しい Intent に更新できます。

最後の段落はあなたの問題を説明していると思います。

于 2013-03-11T16:49:41.417 に答える
0

最後に受信したインテントをメンバー変数 (mLastIntent) に格納できます。次に、このメンバーを onResume() メソッドで使用して、追加データを照会できます。

private Intent mLastIntent;
@Override
protected void onNewIntent(Intent intent) {
    mLastIntent = intent;
};
于 2014-02-03T22:17:14.707 に答える