2

根据 android 开发人员文档:

http://developer.android.com/reference/android/content/Context.html#sendStickyBroadcast(android.content.Intent)

没有规定提供用户定义的权限来保护粘性广播。

我尝试使用 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();

我不能使用普通广播,因为它需要留在系统中,以便其他应用程序从中读取我的应用程序状态。

有没有办法保护我的粘性广播?

4

1 回答 1

2

没有用于发送粘性广播并要求接收者持有特定权限的公共 API。该 API 假设如果您发送的东西是粘性的,您希望它留在周围并可供以后出现的任何东西使用。该sendStickyBroadcastAsUser()方法不对广播的接收者施加任何限制。“系统应用”和所需的权限仅适用于粘性广播的发送者。此方法用于向其他物理用户(即多人类用户设备)运行的应用程序发送广播,而不是作为不同 Linux 用户 ID 运行的单独应用程序包。

您可能会考虑让您的客户端应用程序发送特定类型的广播来查询您的应用程序的状态,而不是依赖诸如此类的粘性广播。如果您的应用程序已启动并正在运行,则它可以使用自己的广播(正常)回复最新状态信息,并需要自定义接收器权限,因为它不是粘性广播。

于 2014-05-06T05:45:34.670 回答