您好我正在尝试创建一个待定意图,其意图附加内容中包含枚举,通过警报管理器启动广播接收器,但是当我试图让枚举说它为空时,我的代码在广播接收器上崩溃了? / p>
以下是我的代码
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()
}
}
答案 0 :(得分:1)
您无法再将自定义对象放入传递给Bundle
的{{1}}中的“额外内容”Intent
。 Android框架尝试反序列化这些自定义对象并失败,这就是警报触发时您不会在AlarmManager
中看到自定义对象的原因。
以下是两种选择:
Bundle
)或int
。String
数组或byte
并将其放入“extras”中。然后,Android可以毫无问题地反序列化。当您的警报触发时,您可以将String
数组或byte
转换回您的自定义对象。 答案 1 :(得分:0)
您可能想尝试
PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_CANCEL_CURRENT)