Java 如何在Android应用程序中安全地向多个接收者发送一个额外的意图

Java 如何在Android应用程序中安全地向多个接收者发送一个额外的意图,java,android,broadcastreceiver,Java,Android,Broadcastreceiver,我有一个intent服务,它接收来自其他活动的关于做什么的明确意图,并且当前返回一个隐式意图,其中数据作为额外数据,如下所示: Intent someImplicitIntent= new Intent(APP_PACKAGE_NAME + ACTION_SOME_DATA); someImplicitIntent.putExtra(APP_PACKAGE_NAME + EXTRA_SOME_DATA, "HELLO"); sendBroadcast(someImplic

我有一个intent服务,它接收来自其他活动的关于做什么的明确意图,并且当前返回一个隐式意图,其中数据作为额外数据,如下所示:

    Intent someImplicitIntent= new Intent(APP_PACKAGE_NAME + ACTION_SOME_DATA);
    someImplicitIntent.putExtra(APP_PACKAGE_NAME + EXTRA_SOME_DATA, "HELLO");
    sendBroadcast(someImplicitIntent);
    Intent someExplicitIntent= new Intent(this, activityOne.class);
    someExplicitIntent.setAction(APP_PACKAGE_NAME + ACTION_SOME_DATA)
    someExplicitIntent.putExtra(APP_PACKAGE_NAME + EXTRA_SOME_DATA, "Hi");
    sendBroadcast(someExplicitIntent);

    Intent someExplicitIntent2= new Intent(this, activityTwo.class);
    someExplicitIntent2.setAction(APP_PACKAGE_NAME + ACTION_SOME_DATA)
    someExplicitIntent2.putExtra(APP_PACKAGE_NAME + EXTRA_SOME_DATA, "Hi");
    sendBroadcast(someExplicitIntent2); ..... so on, for the same data to N activities
就软件设计而言,我在应用程序中有多个活动,运行时会使用相同的数据来做不同的事情。所以,目前我在每个活动中都设置了广播接收器,以监听“APP\u PACKAGE\u NAME+EXTRA\u SOME\u DATA”,然后相应地采取行动,比如中断某些事情。广播接收器与其各自活动的生命周期相关

此设置适用于测试功能。但问题是,据我所知,安卓系统中的隐式意图会在系统范围内传播,因此,任何一个注册的广播接收者收听到该动作的应用程序都会收到该意图及其额外信息。隐式意图对于其预期目的来说是很好的,但对我来说,使用最少的代码和只发送一个或多个接收者的便利性带来了明显的安全风险

我正在考虑做出明确的意图,但我目前有限的理解是,我必须为每个活动创建明确的意图,以便在应用程序范围内保持数据的私密性,如下所示:

    Intent someImplicitIntent= new Intent(APP_PACKAGE_NAME + ACTION_SOME_DATA);
    someImplicitIntent.putExtra(APP_PACKAGE_NAME + EXTRA_SOME_DATA, "HELLO");
    sendBroadcast(someImplicitIntent);
    Intent someExplicitIntent= new Intent(this, activityOne.class);
    someExplicitIntent.setAction(APP_PACKAGE_NAME + ACTION_SOME_DATA)
    someExplicitIntent.putExtra(APP_PACKAGE_NAME + EXTRA_SOME_DATA, "Hi");
    sendBroadcast(someExplicitIntent);

    Intent someExplicitIntent2= new Intent(this, activityTwo.class);
    someExplicitIntent2.setAction(APP_PACKAGE_NAME + ACTION_SOME_DATA)
    someExplicitIntent2.putExtra(APP_PACKAGE_NAME + EXTRA_SOME_DATA, "Hi");
    sendBroadcast(someExplicitIntent2); ..... so on, for the same data to N activities

上面的代码片段看起来是多余的,并且将浪费资源发送无法接收的意图。我需要一些关于如何安全地将一个额外的意图发送到应用程序中的多个接收器的帮助

您可以使用LocalBroadcastManager发送只能由应用程序组件接收的广播,从而使其安全

因此,您可以执行以下操作:

    Intent someImplicitIntent= new Intent(APP_PACKAGE_NAME + ACTION_SOME_DATA);
    someImplicitIntent.putExtra(APP_PACKAGE_NAME + EXTRA_SOME_DATA, "HELLO");
    LocalBroadcastManager.getInstance(this).sendBroadcast(someImplicitIntent);
此后,只需在您想要额外目的的组件中注册您的广播接收器

通过这种方式,您将能够通过本地广播发送intent extra/s

有关LocalBroadcastManager的更多信息,您可以查看以下链接:


.Wow,这么简单:)非常感谢,为了确保,只需使用LocalBroadcastManager.getInstance(this.sendBroadcast(…)和LocalBroadcastManager.getInstance(this.registerReceiver(…)来注册接收者,对吗?答对了。是的,请确保在
LocalBroadcastManager
上发送和注册,因为它不适用于
上下文中的任何广播或接收器。这通常是第一个用户犯的错误,但听起来你已经犯了。干杯