[英]Broadcast Receiver in Service not receiving Intent
我知道有很多與此主題相關的問題,但似乎沒有什么對我有用。
我有一個接收來自多個活動的廣播的服務,我使用不同的動作來區分它們。
這是我的代碼
MyService.java //這是服務類
private BroadcastReceiver SleepTimeReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
Log.d(TAG,"SleepTimeReceiver onReceive is called");
if (intent.getAction().equals("sleepTimeFinished")) {
Log.d(TAG,"intents are matching");
}
}
};
@Override
public void onCreate() {
Log.d(TAG,"onCreate is called");
.
.
registerReceiver(SleepTimeReceiver,new IntentFilter("sleepTimeFinished"));
}
@Override
public void onDestroy() {
Log.d(TAG, "on destroy is called");
unregisterReceiver(SleepTimeReceiver);
}
MyActivity.java //這是活動類
@Override
protected void onCreate(Bundle savedInstanceState) {
Log.d(TAG,"About to send broadcast");
Intent sleepTimeFinishedIntent = new Intent(this, MyService.class);
sleepTimeFinishedIntent.setAction("sleepTimeFinished");
sendBroadcast(sleepTimeFinishedIntent);
Log.d(TAG,"broadcast has been sent");
}
我也嘗試在清單文件中添加接收器,但無濟於事。 在logcat中,我可以看到除接收器的onReceive方法之外的所有方法的日志。 有人可以幫我這個。 這個簡單的問題一直困擾着我幾個小時。
你開始服務了嗎? 我沒有看到onCreate開始,你發送廣播 - 也許接收器尚未注冊?
在我看來,你應該使用LocalBroadcastManager,因為你只處理從你自己的應用程序發送的廣播。
所以在MyService.java
onCreate()
中注冊你的BroadcastReceiver
是這樣的:
LocalBroadcastManager.getInstance(this).registerReceiver(sleepTimeReceiver, new IntentFilter("sleepTimeFinished"));
然后從MyActivity.java
onCreate()
發送您的廣播,如下所示:
Intent sleepTimeFinishedIntent = new Intent("sleepTimeFinished");
LocalBroadcastManager.getInstance(this).sendBroadcast(sleepTimeFinishedIntent);
在MyService.java的onDestroy()
,取消注冊本地廣播接收器,如下所示:
LocalBroadcastManager.getInstance(this).unregisterReceiver(sleepTimeReceiver);
您可能已經注意到我也將廣播接收器的名稱改為以小寫字母開頭,只是為了保持一致性。 所以它是sleepTimeReceiver
而不是SleepTimeReceiver
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.