Java 设置报警时,getSerializableExtra(obj)在BroadcastReceiver的onReceive中返回null

Java 设置报警时,getSerializableExtra(obj)在BroadcastReceiver的onReceive中返回null,java,android,android-intent,broadcastreceiver,Java,Android,Android Intent,Broadcastreceiver,我想启动一个报警并将一个对象传递给触发报警的BroadcastReceiver子类将接收到的intent,但无论我传递给intent的是什么,它都不会被保存,并且接收到的intent将为null 这是我的代码: (设置警报): (接收并触发警报): 问题出在哪里 PS:我知道这个问题在7个月前就在这里提出了,但是没有人解决它 这行不通。如果您传递一个自定义对象(即Android不知道的对象),AlarmManager无法对该对象进行反序列化,它将被忽略。这就是为什么当警报触发时,你在“附加”中看

我想启动一个报警并将一个对象传递给触发报警的BroadcastReceiver子类将接收到的intent,但无论我传递给intent的是什么,它都不会被保存,并且接收到的intent将为null

这是我的代码:

(设置警报):

(接收并触发警报):

问题出在哪里


PS:我知道这个问题在7个月前就在这里提出了,但是没有人解决它

这行不通。如果您传递一个自定义对象(即Android不知道的对象),
AlarmManager
无法对该对象进行反序列化,它将被忽略。这就是为什么当警报触发时,你在“附加”中看不到对象的原因

要解决这个问题,您可以将对象序列化为
字节
数组或
字符串
,并将其放入“附加”中
AlarmManager
知道
byte
数组和
String
s,因此当报警触发时,您应该在“extras”中看到序列化对象。然后您需要反序列化
字节
数组或
字符串
,然后自己重新创建对象

另一个潜在的问题是,您这样做:

PendingIntent pendingIntent = PendingIntent.getBroadcast(this, hash, intent, 0);
此调用并不总是创建一个新的
pendingent
。它可能返回一个现有的
挂起内容
,其中没有您的“附加内容”。为确保不会发生这种情况,您应该执行以下操作:

PendingIntent pendingIntent = PendingIntent.getBroadcast(this, hash, intent, PendingIntent.FLAG_UPDATE_CURRENT);

添加
FLAG\u UPDATE\u CURRENT
将确保您的“附加”被复制到
pendingent
,即使返回的是现有内容。

这不起作用。如果您传递一个自定义对象(即Android不知道的对象),
AlarmManager
无法对该对象进行反序列化,它将被忽略。这就是为什么当警报触发时,你在“附加”中看不到对象的原因

要解决这个问题,您可以将对象序列化为
字节
数组或
字符串
,并将其放入“附加”中
AlarmManager
知道
byte
数组和
String
s,因此当报警触发时,您应该在“extras”中看到序列化对象。然后您需要反序列化
字节
数组或
字符串
,然后自己重新创建对象

另一个潜在的问题是,您这样做:

PendingIntent pendingIntent = PendingIntent.getBroadcast(this, hash, intent, 0);
此调用并不总是创建一个新的
pendingent
。它可能返回一个现有的
挂起内容
,其中没有您的“附加内容”。为确保不会发生这种情况,您应该执行以下操作:

PendingIntent pendingIntent = PendingIntent.getBroadcast(this, hash, intent, PendingIntent.FLAG_UPDATE_CURRENT);

添加
FLAG\u UPDATE\u CURRENT
将确保您的“额外内容”被复制到
pendingent
,即使返回的是现有内容。

什么是
hash
它不会被保存,收到的意图将为null
否。意图不为null。但是
intent.getStringExtra(“myStr”)
将返回null。如果不清楚,请不要放girafe。我用1(简单请求代码)替换了hash。事实上,intent.getStringExtra(“myStr”)返回nullWell,然后更改您的主题和我们文章中的文本。什么是
哈希?
它不会被保存,收到的intent将为null
否。intent不是null。但是
intent.getStringExtra(“myStr”)
将返回null。如果不清楚,请不要放girafe。我用1(简单请求代码)替换了hash。事实上,intent.getStringExtra(“myStr”)返回nullWell,然后在我们的帖子中更改主题和文本。