簡體   English   中英

將服務中的數據發送回我的活動

[英]Send data from Service back to my activity

我有一個創建意圖的活動,使用putExtra()添加一些額外內容並調用startService(intent)來啟動服務。

此服務根據額外內容計算一些內容,然后我想將結果發送回活動。

我可以這樣做?

我嘗試在我的服務上創建一個intent並使用sendBroadcast()進行廣播。 我有一個關於活動的broadcastReceiver,但我不確定我是否正確注冊。 我糊塗了!

有沒有其他方法可以這樣做? 像StartActivityForResult,但對於服務(像StartServiceForResult或類似的東西)?

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

在您的服務中,您將廣播這樣的意圖......

/**
 * 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 );

希望有所幫助

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

其次,使用FLAG_ACTIVITY_SINGLE_TOP啟動活動。 這樣可以防止活動在運行時啟動。

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

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

  1. 您可以創建一個Intent並將數據放入Intent並啟動該活動-----糟糕的想法
  2. 您可以使用SharedPreferences傳遞值 - 僅適用於原始值
  3. 您可以使用靜態變量------我認為這是從服務傳遞的最佳方式。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM