4

我有一個活動,創建一個intent,putExtra()和額外的putExtras並調用startService(intent)來啓動服務。發送數據服務返回到我的活動

該服務根據附加信息計算一些東西,然後我想將結果發送回活動。

我可以通過哪種方式來做到這一點?

我試圖在我的服務上創建一個意圖,並使用sendBroadcast()進行廣播。我有一個廣播接收器的活動,但我不知道如果我註冊它正確。我很困惑!

有沒有其他方法可以做到這一點?像StartActivityForResult,但對於服務(像StartServiceForResult或東西)?

+0

請用您使用的技術標記您的問題。 – 2011-01-27 23:25:23

回答

0

你可以做這三件事我知道:

  1. 您可以創建一個Intent,並把數據意向並啓動活動-----壞主意
  2. 您可以使用SharedPreferences傳遞值 - 僅用於原始值
  3. 您可以使用靜態變量------我認爲這是從服務傳遞的最佳方式。

注意: 如果你有大量的數據,你也可以使用DB。

5

您嘗試使用的方法很好!雖然沒有代碼,但很難說你可能做錯了什麼。

在你的服務,你會播出這樣的意圖......

/** 
* Send broadcast to the activity letting it know the service is active 
* 
* @param pActivate 
*/ 
private final void sendServiceActiveBroadcast(final boolean pActivate) { 
    final Intent _intent = new Intent(); 
    _intent.setAction("com.yourtld.android.SERVICE_BROADCAST"); 
    _intent.addCategory("com.yourtld.android.CATEGORY"); 
    _intent.putExtra("isactive", pActivate); 

    this.sendBroadcast(_intent); 
} 

然後在你的活動,你可以有類似...

創建一個動作字符串:

private static final String SERVICE_BROADCAST_ACTION = "com.yourtld.android.SERVICE_BROADCAST"; 

在您的onResume()方法中,您將擁有...

final IntentFilter serviceActiveFilter = new IntentFilter(SERVICE_BROADCAST_ACTION); 

serviceActiveFilter.addCategory("com.yourtld.android.CATEGORY"); 

this.serviceReceiver = new BroadcastReceiver() { 

    @Override 
    public void onReceive(final Context context, final Intent intent) { 
     if(intent != null) { 
      if(intent.getBooleanExtra("isactive", false)) { 
       // The service is active 
      } else { 
       // False... 
      } 
     } 
    } 
}; 
this.registerReceiver(this.serviceReceiver, serviceActiveFilter); 

希望有幫助

0

首先,您可以讓服務直接將意圖發送給活動。這樣,即使活動目前沒有運行,它也會啓動。

其次,您從FLAG_ACTIVITY_SINGLE_TOP開始活動。這可以防止活動在已經運行的情況下啓動。

第三,在您的活動中實施onNewIntent()以捕獲服務在您的活動已在運行時發送的任何意圖。

相關問題