【问题标题】:Pending intents extra's are lost额外的未决意图丢失
【发布时间】:2018-03-02 16:49:47
【问题描述】:

您好,我正在尝试创建一个挂起的 Intent,该 Intent 的 Intent Extras 中包含一个枚举,它通过警报管理器启动一个广播接收器,但是当我试图让该枚举说它为空时,我的代码在广播接收器上崩溃了?

下面是我的代码

 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()

    }
}

【问题讨论】:

  • 是的,当我在这里复制代码时,这是一个错字。现在修改
  • 使用PendingIntent.FLAG_UPDATE_CURRENT代替0作为getBroadcast()的最后一个参数,看看是否有帮助。
  • 仍然没有包含额外的内容。连设定的动作值都丢失了!?!!?

标签: android kotlin broadcastreceiver alarmmanager


【解决方案1】:

您不能再将自定义对象放入传递给AlarmManagerIntent 中的“附加”Bundle。 Android 框架尝试反序列化这些自定义对象并失败,这就是为什么当警报触发时您不会在 Bundle 中看到自定义对象。

这里有两种选择:

  1. 将数据放在 SQLite 数据库或文件中,而不是放在“附加”中。您可以将 ID 或其他一些唯一值放入“附加项”以帮助您识别数据,但它必须是原语(如int)或String
  2. 将自定义对象序列化(或转换)为byte 数组或String,并将其放入“附加项”中。然后,Android 可以毫无问题地反序列化它。当您的警报触发时,您可以将byte 数组或String 转换回您的自定义对象。

【讨论】:

  • 我会试一试的。但有问题的对象是一个枚举
  • 能否请您添加指向此功能的文档的链接。我找不到。
  • 您可以轻松地将enum 转换为Stringint
  • 我还注意到您设置了重复频率为 60 毫秒的重复警报。这行不通。您无法可靠地设置频率低于 2 分钟的重复警报。 AlarmManager 不是为此而设计的。如果您需要每 60 毫秒触发一次,则需要将消息或 Runnable 发送到 Handler
【解决方案2】:

你可以试试

PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_CANCEL_CURRENT) 

【讨论】:

  • 不高兴,额外的都是空的!这个奇怪的,连动作都是空的!
猜你喜欢
  • 1970-01-01
  • 2016-11-22
  • 1970-01-01
  • 2016-10-07
  • 1970-01-01
  • 1970-01-01
  • 2023-04-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多