根据android开发者文档:
没有规定提供用户定义的权限来保护粘性广播。
我尝试过使用sendStickyBroadcastAsUser,它要求应用程序有两件事(根据上面的链接): 1.获得许可" INTERACT_ACROSS_USERS"和 2.应用程序必须是系统应用程序。
然而,我已经尝试使用指南实现它,但仍然可以接收粘性广播而没有上述两个前提条件(即没有所需权限的正常应用程序),这仍然使我的广播不安全。
以下是我的代码段:
// 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();
我无法使用普通广播,因为它需要留在系统中供其他应用程序从中读取我的应用程序的状态。
有没有办法确保我的粘性广播?
答案 0 :(得分:2)
没有公共API用于发送粘性广播并要求接收者持有特定权限。 API假定如果您发送的内容是粘性的,那么您希望它保留在周围,并且可用于以后出现的任何内容。 sendStickyBroadcastAsUser()
方法不对广播的接收者施加任何限制。 “系统应用程序”和所需权限仅适用于粘性广播的发件人。此方法用于将广播发送到由其他物理用户(即多人类用户设备)运行的应用程序,而不是作为不同Linux用户ID运行的单独应用程序包。
您可以考虑让您的客户端应用发送特定类型的广播来查询应用的状态,而不是依赖于诸如此类的粘性广播。如果您的应用程序已启动并正在运行,则可以使用自己的广播(正常)回复最新状态信息,并且需要自定义接收者权限,因为它不会是粘性广播。