我想使用sendBroadcast来广播只能由发起它的应用程序接收的意图。
用例是我计划在我构建的几个项目之间使用的身份验证模块。目前,当收到401(授权失败)响应代码时,它会广播一个意图,然后可以将其连接到清单中,以便将用户带回登录页面。
所以,为了清楚我想知道我是否可以这样做:
Intent i = new Intent("my.custom.logout.broadcast.path.that.will.be.the.same.in.multiple.apps");
sendBroadcast(i);
不知何故,使用完全相同的未经修改的代码库的其他应用程序无法获取意图。
答案 0 :(得分:0)
不是问题的一部分,但您应该使用permissions限制谁可以发送/接收广播,特别是因为您正在处理身份验证。事实上,我强烈建议您查看AccountManager(API demos)
继续......一个解决方案是将原始应用程序的包名称或特定权限字符串传递给Intent extra,当您响应时,以相同的方式在响应中使用该包名称或权限。遗憾的是,您无法定位广播意图中的特定包。
另一个解决方案是使用来自原始应用程序的PendingIntent.getActivity()
,将PendingIntent
作为额外的(Intent
)添加到新的for-broadcast Intent#putExtra()
中并广播它使用上面的权限模型(因此发件人和收件人可以正确处理权限)。当广播接收器完成其工作时,它可以使用PendingIntent
启动目标活动(包括附加额外附加功能)
答案 1 :(得分:0)
为此,您可以使用LocalBroadcastManager,它专为应用内通信而设计。