2012-04-03 91 views
4

再次,我有一个问题,这又是一个Android相关的问题。这只是为了让我更深入地了解发送广播的工作。SendBroadcast会导致什么样的安全问题,什么是更好的方法?

我想知道的是:

1.为什么将一个使用广播接收器上活动的结果?
我认为广播接收器对于处理实际设备消息更有用,而不仅仅是在应用中传递意图。

2.开发人员遇到什么样的安全问题?
我是否对,如果我假设,任何知道我的包名称(可能是通过逆向工程)的人都可以基本上捕获已发送的意图并查看通过它传递的信息?

3.如果您想将对象传递给其他活动,LocalBroadcastManager有什么好处?
我读过这可能会更好,如果你不希望发送的意图泄漏到应用程序之外。这是否也意味着即使有人拥有包名,他们仍然不能在应用程序外接收广播?

如果您认为我的问题不完整或基于有缺陷的假设,请告诉我,以便我可以从中学习。 :)

非常感谢所有可以帮助。

干杯,

执行

回答

7

1)广播接收机要接收的消息(意图)全局而无需任何UI的机构。他们很好地在不同的组件之间传递信息,比如Service,Activity甚至BroadcastReceiver本身。即使您的应用程序未运行,也可以在清单中定义它们来侦听特定的操作并执行某些操作(例如启动服务/活动)。但是,在activityForResult中,您的应用程序(活动)必须正在运行才能接收结果,这可能不适合所有时间。

2)是的,如果您的操作字符串已为其他应用程序所知,则您的广播将暴露给侦听这些特定操作的任何接收器。为避免这种情况,请使用LocalBroadcastManager

3)使用LocalBroadcastManager是确保您的广播将只播放和你应用程序的上下文内听了增加隐私的最佳方式。其他应用程序无法收听这样的广播,因为它们具有自己的上下文并且不知道应用程序的上下文。

按照谷歌文档的LocalBroadcastManager

  • 你知道你正在广播数据不会离开你的应用程序,所以不必担心泄露隐私数据。
  • 其他应用程序无法将这些广播发送到您的应用程序,所以您不必担心他们可以利用的安全漏洞 。
  • 它比通过系统发送一个全球广播

最后的话更有效:如果您需要在您的应用程序内广播消息,不希望在全球范围内给他们,然后LocalBroadcastManager是最佳选择。否则用普通的方式去吧

+0

综合答案@Waqas – SohailAziz 2012-04-26 06:13:30

+0

这让事情变得更加清晰。谢谢! :) – StingRay5 2012-05-23 08:44:16

+0

这是非常好的@Waqas – 2012-06-06 17:34:56

相关问题