android:当多个实现响应相同的意图时,操作系统如何选择组件实现?
我有一个免费和高级版本的同一个应用程序(几乎相同的代码,相同的类和“if”在这里和那里,不同的包在清单中,相同的进程名在清单中)。主活动使用隐式意图调用服务来执行某些内容 当我在手机上安装这两个应用程序时,结果表明,高级活动实际上有时启动“免费”服务,有时启动“高级”服务。 我一直在玩分类和packagemanager,但它似乎太复杂了 问题:android:当多个实现响应相同的意图时,操作系统如何选择组件实现?,android,android-intent,intentfilter,Android,Android Intent,Intentfilter,我有一个免费和高级版本的同一个应用程序(几乎相同的代码,相同的类和“if”在这里和那里,不同的包在清单中,相同的进程名在清单中)。主活动使用隐式意图调用服务来执行某些内容 当我在手机上安装这两个应用程序时,结果表明,高级活动实际上有时启动“免费”服务,有时启动“高级”服务。 我一直在玩分类和packagemanager,但它似乎太复杂了 问题: Android如何处理响应同一意图的多个组件 你会如何做我正在尝试做的事情:我在多个应用程序中拥有相同的服务,我只希望从所有应用程序调用一个实例 我想你
我想你可以在意图中添加一个额外的布尔isPremium。当然,你还需要一些“如果” 活动:
//send broadcast
Intent serviceStarted = new Intent(Actions.ACTION_START_SERVICE);
serviceStarted.putExtra(Extras.EXTRA_PREMIUM_VERSION, PREMIUM_VERSION);
sendBroadcast(serviceStarted);
接收人:
if (!intent.getExtras().getBoolean(Extras.EXTRA_PREMIUM_VERSION)) {
Log.v(TAG, " - ignoring wrong version");
return;
}
我想你可以在意图中添加一个额外的布尔isPremium。当然,你还需要一些“如果” 活动:
//send broadcast
Intent serviceStarted = new Intent(Actions.ACTION_START_SERVICE);
serviceStarted.putExtra(Extras.EXTRA_PREMIUM_VERSION, PREMIUM_VERSION);
sendBroadcast(serviceStarted);
接收人:
if (!intent.getExtras().getBoolean(Extras.EXTRA_PREMIUM_VERSION)) {
Log.v(TAG, " - ignoring wrong version");
return;
}
我相信Android只会将这个意图转发给一个接收者,所以如果它不是正确的接收者,那么另一个接收者将永远不会收到它。我注意到,如果多个活动响应相同的意图,则会显示一个弹出窗口,但我想知道有关服务的情况。我取决于您如何称呼它-startActivity和startService针对单个活动/服务,可能会触发弹出窗口以选择启动什么。但是使用sendBroadcast会触发所有的接收者,因为接收者会传递它。我相信Android只会将这个意图转发给一个接收者,所以如果它不是正确的接收者,另一个将永远不会接收到它。我注意到,如果多个活动响应相同的意图,则会显示一个弹出窗口,但我想知道有关服务的情况。我取决于您如何称呼它-startActivity和startService针对单个活动/服务,可能会触发弹出窗口以选择启动什么。但是使用sendBroadcast将触发所有接收器,只要接收器将其传递。