我正在使用LocalBroadcastReceiver將消息從IntentService發送到活動。我有一個基本的活動,我的項目中的所有活動都繼承自包含以下活動代碼的活動。還有一個由WakefulBroadcastReceiver初始化的基本IntentService,它包含下面的服務代碼。LocalBroadcastManager.sendBroadcast不觸發BroadcastReceiver onReceive
在我的活動,我有:
@Override
protected void onCreate(Bundle savedInstanceState) {
LocalBroadcastManager.getInstance(this).registerReceiver(
mMessageReceiver, new IntentFilter("push-message"));
super.onCreate(savedInstanceState);
}
@Override
protected void onPause(){
LocalBroadcastManager.getInstance(this).unregisterReceiver(
mMessageReceiver);
super.onPause();
}
@Override
protected void onResume(){
super.onResume();
LocalBroadcastManager.getInstance(this).registerReceiver(
mMessageReceiver, new IntentFilter("push-message"));
}
private BroadcastReceiver mMessageReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
String message = intent.getStringExtra("message");
Log.d("receiver", "Got message: " + message);
}
};
而在我的服務,我有:
public class SimpleMessagerService extends IntentService {
public SimpleMessagerService() {
super("SimpleMessagerService");
}
@Override
protected void onHandleIntent(Intent intent) {
Intent newintent = new Intent("push-message");
// You can also include some extra data.
String message = intent.getExtras().getString("message");
newintent.putExtra("message", message);
LocalBroadcastManager.getInstance(this).sendBroadcast(intent);
}
}
服務onHandleIntent被觸發,當我把一個破發點中它和評估表達式:LocalBroadcastManager.getInstance(this);我可以在mReceivers列表中看到mMessageReceiver;然而,當我在mMessageReceiver的onReceive中放置斷點時,我發現它永遠不會被觸發。
更多信息: 看來我的服務在被調用時不能主動執行任何操作,但不會拋出異常。我嘗試在應用程序文件中保存當前上下文,並從服務中拋出Toast消息。這個過程似乎成功了,但從不出現吐司消息。這是我在該服務的清單:
<service
android:name="packagename.services.SimpleMessagerService"
android:exported="false">
</service>
你已經註冊清單中的接收器? –
您不需要在清單中註冊Receiver。你是否在單獨的進程中運行服務?廣播時您的活動是否在前臺運行? –
至少是它的擴展。我的所有活動都從該活動繼承。這可能是問題嗎? –