我的 MainActicity
以 Intent
开始 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 的 Intent
直接启动 MainActivity
时,像这样:
Intent i = new Intent(this, MainActivity.class);
i.putExtra(IS_NEXT_WEEK, isNextWeek);
finish();
startActivity(i);
一切正常,当 isNextWeek
是 true
时,我得到 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
请参阅 回答如下为什么使用 PendingIntent.FLAG_UPDATE_CURRENT
更好。