2009-11-21 19 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