我正在构建几个包含我创建的库模块的应用程序。在这个库模块中,我定义了一个通用目的对话框,广播这样的“购买”意图:
@Override public void onClick(View view) {
int i = view.getId();
if (i == R.id.btnYes) {
view.getContext().sendBroadcast(new Intent(PayComponent.ACTION_OPEN_PAY_SCREEN)
.putExtra(PayComponent.EXTRA_FROM_PURCHASE_DIALOG, true)
.putExtra(PayComponent.EXTRA_PURCHASE_PACKAGE_NAME, packageName)
);
} else if (i == R.id.btnNo) {
//
}
dismiss();
}
这里的问题是,当我点击应用 A 中的此对话框时,我同时打开了 A 和 B 应用广播接收者未在清单中注册,但在活动中运行时间),两个应用程序都将收到意图并采取相应行动(打开购买活动)。我想要实现的行为是,只有应用程序 A (发出广播的应用程序)才能接收它,所以基本上没有向系统广播意图。
PS:两个应用程序都使用相同的调试密钥进行签名,但它们也使用相同的发布密钥。我很确定这个问题有一个简单的解决方案,但我似乎无法在文档中找到它。
PS2:我不想使用显式意图,因为库不知道将接收意图的组件。它只知道它们应该在同一个应用程序中。
答案 0 :(得分:2)
使用LocalBroadcastManager仅向当前应用发送广播。也可以通过LocalBroadcastManager注册(而不是BroadcastManager)。