jon*_*ney 3 android broadcastreceiver alarmmanager kotlin
您好,我正在尝试创建一个挂起的意图,其中包含一个枚举,该枚举包含在其意图附加中,该枚举通过警报管理器启动广播接收器,但是当我尝试获取枚举说它为空时,我的代码在广播接收器上崩溃了?
下面是我的代码
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)
Run Code Online (Sandbox Code Playgroud)
广播接收器
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()
}
}
Run Code Online (Sandbox Code Playgroud)
您不能再将自定义对象放入传递给 的Bundlean 中的“extras”中。Android 框架尝试反序列化这些自定义对象并失败,这就是为什么您在警报触发时看不到自定义对象。IntentAlarmManagerBundle
这里有两种选择:
int)或String.byte数组或 aString并将其放入“extras”中。然后 Android 可以毫无问题地反序列化它。当警报触发时,您可以将byte数组转换String回自定义对象。| 归档时间: |
|
| 查看次数: |
1182 次 |
| 最近记录: |