Android-防止其他应用程序接收到隐含的意图

Android-防止其他应用程序接收到隐含的意图,android,android-intent,broadcastreceiver,android-manifest,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_P

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

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

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


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

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

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

您可以使用android:export=“false”将接收器限制为仅拥有自己的应用程序。您为什么要使用系统广播与宿主应用程序进行库对话?这类似于在街对面竖起一个巨大的广告牌,以便能够向你的隔壁邻居传递信息。使用回调。或者,使用事件总线(如Gabe Sechan建议的,
LocalBroadcastManager
),您可以使用android:export=“false”将接收器限制为仅拥有应用程序。您为什么会使用系统广播与宿主应用程序进行库对话?这类似于在街对面竖起一个巨大的广告牌,以便能够向你的隔壁邻居传递信息。使用回调。或者,使用事件总线(如Gabe Sechan建议的
LocalBroadcastManager
)。