如何在 Android 应用程序中安全地将一个额外的意图发送给多个接收者
How to securely send one intent extra to multiple receivers within an Android application
我有一个意图服务,它从其他活动中接收关于要做什么的明确意图,目前 returns 一个隐含的意图,将数据作为额外的,如下所示:
Intent someImplicitIntent= new Intent(APP_PACKAGE_NAME + ACTION_SOME_DATA);
someImplicitIntent.putExtra(APP_PACKAGE_NAME + EXTRA_SOME_DATA, "HELLO");
sendBroadcast(someImplicitIntent);
明智的软件设计,我在应用程序中有多个活动,当 运行 时,会使用相同的数据来做不同的事情。因此,目前我在每个 activity 中都设置了广播接收器来监听“APP_PACKAGE_NAME + EXTRA_SOME_DATA”,然后采取相应的行动,就像打断某些东西一样。广播接收器与其各自活动的生命周期相关
此设置非常适合测试功能。但问题是,我知道 Android 中的隐式意图会在整个系统范围内广播意图,因此注册广播接收器侦听操作的任何应用程序都会收到意图及其额外内容。隐式意图非常适合其预期目的,但对我来说,使用最少的代码和仅发送一个或多个收件人的便利性带来了明显的安全风险。
我正在考虑制定明确的意图,但我目前有限的理解是我必须为每个 activity 创建一个明确的意图,以便在应用程序范围内保持数据的私密性,如下所示:
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
上面的代码片段看起来不必要地多余,并且会浪费资源发送不会被拾取的 intent。我如何才能安全地将一个额外的意图发送到应用程序中的多个接收者?
您可以使用 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。
这样,您就可以通过本地广播发送意图extra/s。
关于LocalBroadcastManager的更多信息,您可以查看以下内容link:
https://developer.android.com/reference/android/support/v4/content/LocalBroadcastManager.html
我有一个意图服务,它从其他活动中接收关于要做什么的明确意图,目前 returns 一个隐含的意图,将数据作为额外的,如下所示:
Intent someImplicitIntent= new Intent(APP_PACKAGE_NAME + ACTION_SOME_DATA);
someImplicitIntent.putExtra(APP_PACKAGE_NAME + EXTRA_SOME_DATA, "HELLO");
sendBroadcast(someImplicitIntent);
明智的软件设计,我在应用程序中有多个活动,当 运行 时,会使用相同的数据来做不同的事情。因此,目前我在每个 activity 中都设置了广播接收器来监听“APP_PACKAGE_NAME + EXTRA_SOME_DATA”,然后采取相应的行动,就像打断某些东西一样。广播接收器与其各自活动的生命周期相关
此设置非常适合测试功能。但问题是,我知道 Android 中的隐式意图会在整个系统范围内广播意图,因此注册广播接收器侦听操作的任何应用程序都会收到意图及其额外内容。隐式意图非常适合其预期目的,但对我来说,使用最少的代码和仅发送一个或多个收件人的便利性带来了明显的安全风险。
我正在考虑制定明确的意图,但我目前有限的理解是我必须为每个 activity 创建一个明确的意图,以便在应用程序范围内保持数据的私密性,如下所示:
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
上面的代码片段看起来不必要地多余,并且会浪费资源发送不会被拾取的 intent。我如何才能安全地将一个额外的意图发送到应用程序中的多个接收者?
您可以使用 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。
这样,您就可以通过本地广播发送意图extra/s。
关于LocalBroadcastManager的更多信息,您可以查看以下内容link:
https://developer.android.com/reference/android/support/v4/content/LocalBroadcastManager.html