将Serializable额外传递给SDK26 +中的PendingIntent

时间:2018-06-07 23:57:50

标签: java android android-7.1-nougat

我正在开发一个应用程序,我必须传递一个实现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的测试手机

0 个答案:

没有答案