Android - 防止其他应用收到隐含意图

时间:2017-02-21 22:12:40

标签: android android-intent broadcastreceiver android-manifest

我正在构建几个包含我创建的库模块的应用程序。在这个库模块中,我定义了一个通用目的对话框,广播这样的“购买”意图:

@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:我不想使用显式意图,因为库不知道将接收意图的组件。它只知道它们应该在同一个应用程序中。

1 个答案:

答案 0 :(得分:2)

使用LocalBroadcastManager仅向当前应用发送广播。也可以通过LocalBroadcastManager注册(而不是BroadcastManager)。