[英]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()
以捕獲服務在您的活動已經運行時發送的任何意圖。
你可以做我知道的這三件事:
注意:如果您有大量數據,也可以使用DB。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.