Hier ist das Problem. Mein Programm läuft perfekt in Android 6.0. Nach dem Update das Gerät auf Android 7.0. Pendingintent kann die parzellierbaren Daten nicht an boradcast-receiver übergeben. Hier ist der Code.Pendingintent getbroadcast verloren parcelable Daten
Feuer der Alarm
public static void setAlarm(@NonNull Context context, @NonNull Todo todo) {
AlarmManager alarmManager = (AlarmManager) context.getSystemService(context.ALARM_SERVICE);
Intent intent = new Intent(context, AlarmReceiver.class);
intent.putExtra("KEY_TODO", todo);
PendingIntent alarmIntent = PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
alarmManager.set(AlarmManager.RTC_WAKEUP, todo.remindDate.getTime(), alarmIntent);
}
Todo ist ein Parcel Klasse während todo die Instanz ich in Benachrichtigung benötigen ist.
In Broadcastceiver kann ich nicht Parcelable Daten bekommen.
public void onReceive(Context context, Intent intent) {
Todo todo = intent.getParcelableExtra("KEY_TODO");
}
Hier das Ergebnis der Absicht ist, wenn ich enter image description here
debuggen Ich weiß nicht, warum nur die Absicht, eine Integer enthält, dass ich es nie in. Wo ist die Parcel todo. Dieser Code hat kein Problem in Android 6.0, aber laufen nicht in 7.0
Haben Sie Ihre 'Todo' Objekt in einem' Bundle' versucht Verpackung, bevor es zu den „Extras“ und fügte hinzu? Dies funktioniert normalerweise, wenn benutzerdefinierte "Parcelable" -Objekte an den "AlarmManager" übergeben werden (aber jetzt in Android 7 defekt sein können). Ich wäre an Ihren Ergebnissen interessiert. –
Um hinzuzufügen: 'Bundle Bundle = neues Bundle; bundle.putParcelable ("todo", todo); intent.putExtra ("KEY_TODO", Bündel); '. Extra extrahieren: 'Bündel bundle = intent.getBundleExtra (" KEY_TODO "); if (Bündel! = null) {Todo todo = bundle.getParcelableExtra ("todo"); } ' –