我正在开发一个应用程序,我必须传递一个实现Serializable类的类。此应用程序必须发送使用AlarmManager安排的推送通知,并且我需要该类在用户打开推送通知时打开意图。 要通过(来自活动)我使用:
public void callNotification(Events event){
//will fire in 30 minutes before the event time
long when = event.getDateInMilli() - 1800000L;
AlarmManager am = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent(this, NotificationReceiver.class);
intent.putExtra("myAction", "mDoNotify");
Bundle bundle = new Bundle();
bundle.putString("clientName", event.getClientName());
bundle.putLong("date", event.getDateInMilli());
bundle.putSerializable("event", event);
intent.putExtras(bundle);
PendingIntent pendingIntent = PendingIntent.getBroadcast(this, number, intent, PendingIntent.FLAG_UPDATE_CURRENT);
am.set(AlarmManager.RTC_WAKEUP, when, pendingIntent);
}
然后,在NotificationReceiver 中接收额外内容(扩展BroadcastReceiver):
Bundle bundle = intent.getExtras();
String clientName = bundle.getString("clientName");
long dateMillis = bundle.getLong("date");
event = (Events) bundle.getSerializable("event");
但代码bundle.getSerializable("event")
会返回" null" 。
奇怪的是bundle.getString("clientName")
,因为它也返回null,但bundle.getLong("date")
返回正确的值。
在日志中,我发现了这个:
W / Intent:填写额外内容失败
java.lang.RuntimeException:Parcelable在读取Serializable对象时遇到ClassNotFoundException(name = com.myapp.model.Events)
[...]
引起:java.lang.ClassNotFoundException:没找到类" com.myapp.model.Events" on path:DexPathList [[zip file" /system/framework/services.jar" ;, zip file" /system/framework/ethernet-service.jar" ;, zip file" /system/framework/wifi-service.jar"],nativeLibraryDirectories=[/oem/lib,/ system / lib,/ vendor / lib,/ system / lib,/ vendor / lib]]
我试图将对象转换为字节数组byte[]
并发送它,但也没有用。
我怎样才能发送和接收这门课程?
我使用Android SDK 26和带有Android Nougat 7.1.1的测试手机