根据 Android 开发人员文档:
没有规定提供用户定义的权限来保护粘性广播。
我尝试使用 sendStickyBroadcastAsUser ,它要求应用程序有两件事(根据上面的链接): 1. 拥有“INTERACT_ACROSS_USERS”权限并且 2.应用程序必须是系统应用程序。
但是,我尝试按照指南来实现它,但在没有上述两个前提条件的情况下(即使用未经所需许可的普通应用程序)仍然可以接收粘性广播,这仍然使我的广播不安全。
以下是我的代码 fragment :
// send sticky broadcast.
Intent intent = new Intent("my_action");
intent.putExtra("my_extra", state);
if (DebugMode.DEBUG) {
Log.d(TAG, "Sending Broadcast " + intent.toUri(0));
}
Parcel in = Parcel.obtain();
context.sendStickyBroadcastAsUser(intent, new UserHandle(in ));
in.recycle();
我无法使用普通广播,因为它需要保留在系统中,以便其他应用程序从中读取我的应用程序状态。
有办法保护我的粘性广播吗?
最佳答案
没有用于发送粘性广播并要求接收者持有特定权限的公共(public) API。 API 假设,如果您发送的内容是粘性的,您希望它保留下来并可用于以后出现的任何内容。 sendStickyBroadcastAsUser()
方法不会对广播的接收者施加任何限制。 “系统应用程序”和所需的权限仅适用于粘性广播的发送者。此方法用于向其他物理用户(即多人用户设备)运行的应用程序发送广播,而不是向以不同 Linux 用户 ID 运行的单独应用程序包发送广播。
您可能会考虑让客户端应用程序发送特定类型的广播来查询应用程序的状态,而不是依赖于这样的粘性广播。如果您的应用程序已启动并正在运行,则它可以使用自己的广播(正常)进行回复,并提供最新的状态信息,并且需要自定义接收者权限,因为它不会是粘性广播。
关于android - 为粘性广播添加安全性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23320045/