嗨,我正在尝试创建一个未完成的意图,该意图的意图额外内容中包含一个枚举,它通过警报管理器启动广播接收器,但是当我尝试让该枚举说它为null时,我的代码在广播接收器上崩溃了?
这是我的下面的代码
val calendar = Calendar.getInstance()
calendar.timeInMillis = System.currentTimeMillis()
val intent = Intent(context, ClearDataReceiver::class.java)
intent.action = "clear data"
intent.putExtra(ClearDataReceiver.DATA_TYPE_EXTRA, DataType.CUSTOMER_DETAILS )
val pendingIntent = PendingIntent.getBroadcast(context, 0, intent, 0)
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.timeInMillis, 60 * 1, pendingIntent)
广播接收者
override fun onReceive(context: Context?, intent: Intent?) {
super.onReceive(context, intent)
var bundle = intent!!.extras
val dataType = bundle.getSerializable(DATA_TYPE_EXTRA) as DataType
when(dataType){
DataType.BALANCE -> storage.clearCurrentBalance()
DataType.CARD_NUMBER -> storage.clearardNumber()
DataType.CUSTOMER_DETAILS -> storage.clearUserDetails()
}
}
最佳答案
您不能再将传递给Bundle
的Intent
中的自定义对象放入“extras” AlarmManager
中。 Android框架尝试反序列化这些自定义对象并失败,这就是为什么在警报触发时您不会在Bundle
中看到自定义对象的原因。
这里有两种选择:
int
)或String
。 byte
数组或String
,并将其放入“extras”中。然后,Android可以对此进行反序列化而不会出现问题。警报触发时,可以将byte
数组或String
转换回自定义对象。