问题描述
Pendingintent无法将可分配的数据传递给BoradcastReveiver.
发出警报,Todo是一个Parcelable类,而todo是我在通知中需要的实例.
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);
}
在BoradcastReveiver中,我无法获取可用的数据,使用getParcelableExtra获取的对象为空
public void onReceive(Context context, Intent intent) {
Todo todo = intent.getParcelableExtra("KEY_TODO");
}
解决方案
手动将Parceable转换为byte []并将其放入Intent extra中,根据需要手动将其转换回Parcelable.
// inspired by https://stackoverflow.com/a/18000094/115145
public class Parcelables {
public static byte[] toByteArray(Parcelable parcelable) {
Parcel parcel=Parcel.obtain();
parcelable.writeToParcel(parcel, 0);
byte[] result=parcel.marshall();
parcel.recycle();
return(result);
}
public static <T> T toParcelable(byte[] bytes,
Parcelable.Creator<T> creator) {
Parcel parcel=Parcel.obtain();
parcel.unmarshall(bytes, 0, bytes.length);
parcel.setDataPosition(0);
T result=creator.createFromParcel(parcel);
parcel.recycle();
return(result);
}
}
相关参考
android – Pendingintent getbroadcast丢失了可分配的数据
https://m.jb51.cc/android/1071444.html
版权声明:本文为weixin_44008788原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。