2009-11-21 59 views
2

我有一个相同的应用程序的免费和高级版本(几乎相同的代码,相同的类与“如果”在这里和那里,清单中的不同包,在清单中相同的进程名称)。主要活动使用IMPLICIT意图调用服务来执行某些内容。android:当多个实现响应相同的意图时,操作系统如何选择组件实现?

当我在手机上安装这两个应用程序时,事实证明,优质活动实际上有时会启动“免费”服务,而另一种服务则是“优质”服务。 我一直在玩类和packagemanager,但它似乎太复杂了。

问题:

  1. 如何Android处理多个组件响应同一个意图是什么?
  2. 你会怎么做我想做的事情:我在多个应用程序中有相同的服务,我只想从所有应用程序调用一个实例?

回答

0

我想你可以添加一个额外的布尔值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; 
} 
+0

我相信Android的唯一前锋是意图单个接收器,所以如果它不是正确的,其他人会永远得不到。我注意到,如果多个活动对同一个意图做出响应,那么会显示一个弹出窗口,但我想知道服务。 – 2011-09-07 20:37:42

+0

我看你是怎么称呼它的 - startActivity和startService是针对单个Activity/Service的,并且可能会触发弹出窗口来选择要开始的内容。但是使用sendBroadcast会触发所有接收器,让接收器通过它。 – Tapirboy 2011-09-14 11:01:42