2010-06-29 42 views
1

當服務達到特定處理階段時,服務是否可以向調用活動進行報告?Android - 可否將服務報告回調用活動,狀態爲

例如:考慮一個音樂播放器活動,它將啓動在後臺播放的實際音樂作爲Android服務。當服務已經到達MediaPlayer的onPrepared時,我想檢測並通知活動。當MediaPlayer的onPrepared被調用時,服務是否可以告訴調用活動,讓活動知道音頻已準備好並準備播放?

我基本上是看看是否有解決方法,而不是在活動中有一個線程,不斷ping通以檢查服務是否已達到onPrepared。

感謝 克里斯

回答

0

您可以隨時使用的接口應用工作的(S)和服務之間的通信。 在連接到服務之後,您立即設置了它的接口,並且如果服務達到某個狀態,並且希望它返回活動,則只需調出適當的方法即可。

2

我發現的最簡單的方法是使用支持庫中的LocalBroadcast。這裏有一個例子:

在服務:

String action = "status"; // arbitrary string 
private void updateStatus(){ 
    Intent intent = new Intent(action); 
    // fill the intent with other variables you want to pass 
    LocalBroadcastManager.getInstance(context).sendBroadcast(intent); 
} 

在你的活動:

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    LocalBroadcastManager.getInstance(context).registerReceiver(receiver,new IntentFilter(action)); 
} 


@Override 
protected void onResume() { 
    LocalBroadcastManager.getInstance(context).registerReceiver(receiver,new IntentFilter(action)); 
} 

@Override 
protected void onPause() { 
    LocalBroadcastManager.getInstance(context).unregisterReceiver(receiver); 
} 

String action = "status"; 
BroadcastReceiver receiver = new BroadcastReceiver() { 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     String intentAction = intent.getAction(); 
     if(intentAction.equals(action){ 
      // Process the status from the service 
     }    
    } 
}; 
相關問題