- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我又遇到了一个与 Android 相关的问题。这只是为了让我更深入地了解发送广播的工作原理。
我想知道的是:
<强>1。为什么要在 Activity 上使用广播接收器来获取结果?
我认为广播接收器对于处理实际的设备消息更有用,而不仅仅是在应用程序中传递 Intent 。
<强>2。开发人员可能会遇到什么样的安全问题?
如果我假设任何知道我的包名称(可能通过逆向工程)的人基本上都能捕捉到发送的 Intent 并看到传递的信息,我是否正确用它吗?
<强>3。如果您想将对象传递给其他 Activity ,LocalBroadcastManager 有什么用?
我读到,如果您不希望发送的 Intent 泄漏到应用程序之外,这可能会更好。这是否也意味着即使有人知道包名他们仍然无法在应用程序外接收广播?
如果您认为我的问题不完整或基于有缺陷的假设,请告诉我,以便我从中学习。 :)
非常感谢所有可以提供帮助的人。
干杯,
做
最佳答案
1) 广播接收器是一种在没有任何 UI 的情况下全局接收消息( Intent )的机制。它们很适合在不同组件之间传递信息,例如 Service、Activity 甚至 BroadcastReceiver 本身。即使您的应用程序未运行,它们也可以在 list 中定义以监听特定操作并执行操作(例如启动服务/Activity )。但是,在 activityForResult 中,您的应用程序( Activity )必须正在运行才能接收结果,这可能并不总是合适的。
2) 是的,如果您的操作字符串 为其他应用所知,那么您的广播就会暴露给任何收听这些特定操作的接收器。为避免这种情况,请使用 LocalBroadcastManager。
3) 使用 LocalBroadcastManager 是增加隐私的最佳方式,因为它可以确保您的广播只会在您的应用程序上下文 中广播和收听。其他应用程序无法收听此类广播,因为它们有自己的上下文并且不知道您应用程序的上下文。
As per google docs for LocalBroadcastManager:
- You know that the data you are broadcasting won't leave your app, so don't need to worry about leaking private data.
- It is not possible for other applications to send these broadcasts to your app, so you don't need to worry about having security holes they can exploit.
- It is more efficient than sending a global broadcast through the system
最后的话:如果您需要在您的应用程序内广播消息并且不想在全局范围内发送它们,那么 LocalBroadcastManager 是最佳选择。否则走寻常路
关于android - SendBroadcast 可能会导致哪些安全问题,什么是更好的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9989283/
我在从作为系统应用程序加载到自定义 ROM 中的应用程序发送 Broadcast 时遇到问题(使用 android:sharedUserId="android.uid.system" 在 Manife
sendBroadcast() - 它应该在 Activity 中调用吗?我正在尝试从不扩展 Activity 的实用程序类方法调用 sendBroadcast()。我收到如下编译错误 The met
我有一个广播来检查网络,当网络改变状态时,我用 onNetworkActivated() 或 onNetworkInactivated() 通知我的 Activity : public class N
我有一个列表,我试图使用 Intent 来广播它。在学习了在线教程后,建议我使用 Parcelable 来发送此数据。但是,我在 logcat 中不断收到此错误: Caused by: java.la
我正在使用 sendBroadcast 进行媒体文件扫描。然后我需要等到完成sendBroadcast 之后。我如何在 Android 中执行此操作? 我知道我可以在这里使用简单的 while 逻辑,
我现在已经尝试了 10 多个小时,但我似乎无法考虑任何其他事情。我尝试了互联网上所有可能的示例,但没有成功。 我有扩展NotificationListenerService的NotificationM
很想知道 sendBroadcast 的内部工作原理,如果有人能解释一下就好了。请指出实际的实现。 我在看android源码 ContextWrapper.java 包含 sendBroadcast(
我没遇到什么问题。我正在刷新我的 SD 卡: sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, Uri.parse("file://" + E
我又遇到了一个与 Android 相关的问题。这只是为了让我更深入地了解发送广播的工作原理。 我想知道的是: 1。为什么要在 Activity 上使用广播接收器来获取结果? 我认为广播接收器对于处理实
在广播接收器中发送广播有什么问题吗? 最佳答案 我认为从 BroadcastReceiver 中再次发送广播没有任何问题。 你可以看到类似的例子here. 要了解有关广播接收器的更多信息,请参阅 th
我有一个创建线程的服务。该线程做了一些工作,然后在 Service 上调用 sendBroadcast()。这意味着 sendBroadcast() 是从工作线程调用的,而不是从运行服务的线程调用的。
我有两个应用程序,App A 和 App B。 App A 需要向 App B 发送一些数据(或进行通信以做某事)。 最好的方法是什么。App B 可以有一个广播监听器来接收来自 App A 的广播。
startActivity() 和 sendBroadcast() 有什么区别?我们可以使用 startActivity() 来启动一个 Activity 。sendBroadcast() 也可以这样
我正在尝试修改作为 Android Studio 示例提供的 BluetoothLeGatt 项目,以便在每次读取特征时将 RSSI 值发送回主要 Activity 以供显示。我创建了一个新的 Int
我正在使用 IntentService 从远程源获取数据。当服务获取数据后,它使用 sendBroadcast(intent) 广播它。 在我的主要 Activity 中,我扩展了 Broadcast
LocalBroadcastManager.sendBroadcast() 的返回值( bool 值)没有记录。 我想当至少有一个接收者被注册时它返回 true,如果没有接收者被注册则返回 false
我想制作一个库,以同步方式(从客户端)执行一些 Intent 发送/接收的东西。这样我图书馆的客户就不必关心接收器的实现了。 图书馆会在某处发送 Intent 并接收响应。然后将结果同步返回给客户端。
我怎样才能摆脱编译错误? sendBroadcast(intent); 此方法在我制作的另一个应用程序中运行良好,但在当前应用程序中存在编译错误。红色下划线有错误消息“未定义新的 Runnable 类
我在服务中的线程池中有一个线程可以做很多事情。最后,它将一些数据插入提供程序并发送广播以通知 GUI 有关新数据的信息。 经常发送和接收 1-3 个广播,然后不再接收广播。当我查看线程堆栈跟踪时,它们
我有一个应用程序,它会在启动后立即发送一个广播,这样它就可以获得可用图像的刷新列表。直到今天这一切都很好(至少那是我注意到这一点的时候)。 它仍会启动,但一旦调用 Intent,焦点就会转移到主屏幕应
我是一名优秀的程序员,十分优秀!