Android - 防止其他应用程序接收隐式意图

Android - Prevent other apps from receiving an implicit intent

我正在构建多个应用程序,它们都包含我创建的库模块。在这个库模块中,我定义了一个通用对话框,它广播 "buy" 意图,如下所示:

@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 中单击此对话框时,我同时拥有两个应用程序 AB 打开(广播接收器未在清单中注册,但 运行-活动时间),两个应用程序都会收到意图并采取相应行动(打开购买 activity) .我想要实现的行为是只有应用程序 A(发出广播的应用程序)才能接收到它,所以基本上意图不会广播到系统。

PS:两个应用程序都使用相同的调试密钥进行签名,但它们也使用相同的发布密钥。我很确定这个问题有一个简单的解决方案,但我似乎无法在文档中找到它。

PS2:我不想使用显式意图,因为库不知道将接收意图的组件。它只知道它们应该在同一个应用程序中。

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