如何从 PendingIntent 中获取 Intent
Posted
技术标签:
【中文标题】如何从 PendingIntent 中获取 Intent【英文标题】:How to get Intent from PendingIntent 【发布时间】:2014-07-06 15:54:46 【问题描述】:我可以从PendingIntent
获得Intent
吗?
这是场景:
-
我创建了一个
Intent
(我们称之为myIntent
)
我用字符串添加了一些额外信息(称之为myInfo
)
我使用myIntent
创建了一个PendingIntent
(myPendingIntent
)
我使用AlarmManager
和myPendingIntent
设置了一个闹钟
在稍后阶段,我使用 PendingIntent.getBroadcast
获取 PendingIntent
那时我想从myIntent
中读取myInfo
,它位于myPendingIntent
这可能吗?通过环顾 Google,我接近得出结论,这是不可能的。
【问题讨论】:
【参考方案1】:这可能吗?
不。 PendingIntent
是一个只写接口。可以替换Intent
,但是不能读取。
【讨论】:
如果您使用相同的requestCode
调用PendingIntent.getService
(或者可能是.getBroadcast
),如果当前由AlarmManager 持有,您似乎可以获得Intent(检索最初存储的Extras)作为原始和 no 标志,然后立即send()
对自己的意图。有什么理由不应该使用这种方法(它在所有 android 版本中都可靠吗)?
@Michael:我没用过也不会用,所以我不能评论它的可靠性。坦率地说,我很沮丧地发现这是可能的。
@Michael:我不喜欢安全漏洞。我认为PendingIntent
的只写接口部分是为了使底层Intent
的细节不被第三方控制。这将被利用,但 Android 安全团队表示它正在按预期工作。
啊,我明白了。文档似乎确实警告说,发出 PendingIntent 几乎可以让接收者成为您,因此访问 Intent 本身似乎是一个人最不担心的事情。
@Michael:你似乎还没有看到一些开发人员在附加组件中添加了什么。【参考方案2】:
从 4.2.2 开始可以使用反射。看看这个answer,有完整的解决方案从PendingIntent
获取Intent
。
【讨论】:
如果您尝试从意图中获取 Parceable 捆绑包,此解决方案将失败。 在较新版本的 Android 上,不再可能使用反射获取 Intent。见***.com/q/42401911/324625以上是关于如何从 PendingIntent 中获取 Intent的主要内容,如果未能解决你的问题,请参考以下文章