嗨,我正在尝试创建一个挂起的 Intent ,其 Intent 附加内容中包含一个枚举,通过警报管理器启动广播接收器,但是当我试图让枚举说它为空时,我的代码在广播接收器上崩溃?
这是我下面的代码
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
你传递给 AlarmManager
. Android 框架尝试反序列化这些自定义对象并失败,这就是您在 Bundle
中看不到自定义对象的原因。当警报触发时。
这里有 2 个备选方案:
int
)或 String
. byte
数组或 String
并将其放在“附加”中。然后,Android 可以毫无问题地反序列化它。当您的警报触发时,您可以转换 byte
数组或 String
回到您的自定义对象。 关于android - 额外的未决 Intent 丢失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49073675/