私MainActicity
はRefreshService
と呼ばれるエキストラIntent
があるで始まります。boolean
isNextWeek
私RefreshService
は、ユーザーがクリックしたときにNotification
開始MainActivity
するを作成します。
これは次のようになります。
Log.d("Refresh", "RefreshService got: isNextWeek: " + String.valueOf(isNextWeek));
Intent notificationIntent = new Intent(this, MainActivity.class);
notificationIntent.putExtra(MainActivity.IS_NEXT_WEEK, isNextWeek);
Log.d("Refresh", "RefreshService put in Intent: isNextWeek: " + String.valueOf(notificationIntent.getBooleanExtra(MainActivity.IS_NEXT_WEEK,false)));
pendingIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0);
builder = new NotificationCompat.Builder(this).setContentTitle("Title").setContentText("ContentText").setSmallIcon(R.drawable.ic_notification).setContentIntent(pendingIntent);
notification = builder.build();
// Hide the notification after its selected
notification.flags |= Notification.FLAG_AUTO_CANCEL;
notificationManager.notify(NOTIFICATION_REFRESH, notification);
あなたが見ることができるようにnotificationIntent
持っている必要がありboolean
、余分なをIS_NEXT_WEEK
の値とisNextWeek
に置かれていますPendingIntent
。
これをクリックするNotification
と、常にこれのfalse
値としてisNextWeek
これは私が値を取得する方法ですMainActivity
:
isNextWeek = getIntent().getBooleanExtra(IS_NEXT_WEEK, false);
ログ:
08-04 00:19:32.500 13367-13367/de.MayerhoferSimon.Vertretungsplan D/Refresh: MainActivity sent: isNextWeek: true
08-04 00:19:32.510 13367-13573/de.MayerhoferSimon.Vertretungsplan D/Refresh: RefreshService got: isNextWeek: true
08-04 00:19:32.510 13367-13573/de.MayerhoferSimon.Vertretungsplan D/Refresh: RefreshService put in Intent: isNextWeek: true
08-04 00:19:41.990 13367-13367/de.MayerhoferSimon.Vertretungsplan D/Refresh: MainActivity.onCreate got: isNextWeek: false
次のようにìsNextValue` MainActivity
でを直接開始するとIntent
:
Intent i = new Intent(this, MainActivity.class);
i.putExtra(IS_NEXT_WEEK, isNextWeek);
finish();
startActivity(i);
すべてが正常に機能し、true
いつになるかわかりisNextWeek
ますtrue
。
常にfalse
価値があることは何を間違っていますか?
更新
これは問題を解決します:https : //stackoverflow.com/a/18049676/2180161
見積もり:
私の疑いは、インテントで変更されるのはエクストラだけなので、
PendingIntent.getActivity(...)
ファクトリーメソッドは単に古いインテントを最適化として再利用しているということです。RefreshServiceで、次のことを試してください。
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, notificationIntent, PendingIntent.FLAG_CANCEL_CURRENT);
見る:
http://developer.android.com/reference/android/app/PendingIntent.html#FLAG_CANCEL_CURRENT
アップデート2
使用する方が良い理由は以下の回答をご覧くださいPendingIntent.FLAG_UPDATE_CURRENT
。