簡體   English   中英

服務中的廣播接收器未接收意圖

[英]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.

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