My MainActicity
bắt đầu RefreshService
với một Intent
cái có boolean
thêm một gọi isNextWeek
.
My RefreshService
làm cho Notification
nó bắt đầu MainActivity
khi người dùng nhấp vào nó.
nó trông như thế này:
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);
Như bạn có thể thấy notificationIntent
nên có boolean
thêm IS_NEXT_WEEK
với giá trị isNextWeek
được đặt trong PendingIntent
.
Khi tôi nhấp vào bây giờ, Notification
tôi luôn nhận được false
giá trị củaisNextWeek
Đây là cách tôi nhận được giá trị trong MainActivity
:
isNextWeek = getIntent().getBooleanExtra(IS_NEXT_WEEK, false);
Nhật ký:
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
Khi tôi trực tiếp bắt đầu MainActivity
với một Intent
với ìsNextValue` như thế này:
Intent i = new Intent(this, MainActivity.class);
i.putExtra(IS_NEXT_WEEK, isNextWeek);
finish();
startActivity(i);
tất cả mọi thứ hoạt động tốt và tôi nhận được true
khi isNextWeek
là true
.
Điều gì làm tôi sai khi luôn có một false
giá trị?
CẬP NHẬT
điều này giải quyết vấn đề: https://stackoverflow.com/a/18049676/2180161
Trích dẫn:
Sự nghi ngờ của tôi là, vì điều duy nhất thay đổi trong Ý định là các tính năng bổ sung, nên
PendingIntent.getActivity(...)
phương thức xuất xưởng chỉ đơn giản là sử dụng lại mục đích cũ như một sự tối ưu hóa.Trong Làm mới Dịch vụ, hãy thử:
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, notificationIntent, PendingIntent.FLAG_CANCEL_CURRENT);
Xem:
http://developer.android.com/reference/android/app/PendingIntent.html#FLAG_CANCEL_CURRENT
CẬP NHẬT 2
Xem câu trả lời dưới đây tại sao nó là tốt hơn để sử dụng PendingIntent.FLAG_UPDATE_CURRENT
.