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 中单击此对话框时,我同时拥有两个应用程序 A 和 B 打开(广播接收器未在清单中注册,但 运行-活动时间),两个应用程序都会收到意图并采取相应行动(打开购买 activity) .我想要实现的行为是只有应用程序 A(发出广播的应用程序)才能接收到它,所以基本上意图不会广播到系统。
PS:两个应用程序都使用相同的调试密钥进行签名,但它们也使用相同的发布密钥。我很确定这个问题有一个简单的解决方案,但我似乎无法在文档中找到它。
PS2:我不想使用显式意图,因为库不知道将接收意图的组件。它只知道它们应该在同一个应用程序中。
使用 LocalBroadcastManager 仅向您当前的应用程序发送广播。也通过 LocalBroadcastManager 注册(而不是 BroadcastManager)。
我正在构建多个应用程序,它们都包含我创建的库模块。在这个库模块中,我定义了一个通用对话框,它广播 "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 中单击此对话框时,我同时拥有两个应用程序 A 和 B 打开(广播接收器未在清单中注册,但 运行-活动时间),两个应用程序都会收到意图并采取相应行动(打开购买 activity) .我想要实现的行为是只有应用程序 A(发出广播的应用程序)才能接收到它,所以基本上意图不会广播到系统。
PS:两个应用程序都使用相同的调试密钥进行签名,但它们也使用相同的发布密钥。我很确定这个问题有一个简单的解决方案,但我似乎无法在文档中找到它。
PS2:我不想使用显式意图,因为库不知道将接收意图的组件。它只知道它们应该在同一个应用程序中。
使用 LocalBroadcastManager 仅向您当前的应用程序发送广播。也通过 LocalBroadcastManager 注册(而不是 BroadcastManager)。