Java 服务中的广播接收器没有接收意图

Java 服务中的广播接收器没有接收意图,java,android,android-intent,android-broadcastreceiver,Java,Android,Android Intent,Android Broadcastreceiver,我知道有很多关于这个话题的问题,但对我来说似乎什么都不管用 我有一个从多个活动接收广播的服务,我对接收到的每个广播使用不同的操作来区分它们 这是我的密码 MyService.java//这是服务类 private BroadcastReceiver SleepTimeReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent 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中启动,并且您在那里发送广播-可能接收器尚未注册?

您启动服务了吗?我看不到从onCreate开始,您在那里发送广播-可能接收器尚未注册?

在我看来,您应该使用,因为您只处理从您自己的应用程序中发送的广播

因此,在
MyService.java的
onCreate()
中注册您的
BroadcastReceiver
,如下所示:

LocalBroadcastManager.getInstance(this).registerReceiver(sleepTimeReceiver, new IntentFilter("sleepTimeFinished"));
Intent sleepTimeFinishedIntent = new Intent("sleepTimeFinished");
LocalBroadcastManager.getInstance(this).sendBroadcast(sleepTimeFinishedIntent);
然后从
MyActivity.java的
onCreate()
以如下方式发送广播:

LocalBroadcastManager.getInstance(this).registerReceiver(sleepTimeReceiver, new IntentFilter("sleepTimeFinished"));
Intent sleepTimeFinishedIntent = new Intent("sleepTimeFinished");
LocalBroadcastManager.getInstance(this).sendBroadcast(sleepTimeFinishedIntent);
在MyService.java的
onDestroy()
中,按如下方式注销本地广播接收器:

LocalBroadcastManager.getInstance(this).unregisterReceiver(sleepTimeReceiver);
正如你可能已经注意到的那样,为了保持一致性,我还将广播接收器的名称改为以小写字母开头。
所以它是
sleepTimeReceiver
,而不是
sleepTimeReceiver

,在我看来,您应该使用,因为您只处理从您自己的应用程序中发送的广播

因此,在
MyService.java的
onCreate()
中注册您的
BroadcastReceiver
,如下所示:

LocalBroadcastManager.getInstance(this).registerReceiver(sleepTimeReceiver, new IntentFilter("sleepTimeFinished"));
Intent sleepTimeFinishedIntent = new Intent("sleepTimeFinished");
LocalBroadcastManager.getInstance(this).sendBroadcast(sleepTimeFinishedIntent);
然后从
MyActivity.java的
onCreate()
以如下方式发送广播:

LocalBroadcastManager.getInstance(this).registerReceiver(sleepTimeReceiver, new IntentFilter("sleepTimeFinished"));
Intent sleepTimeFinishedIntent = new Intent("sleepTimeFinished");
LocalBroadcastManager.getInstance(this).sendBroadcast(sleepTimeFinishedIntent);
在MyService.java的
onDestroy()
中,按如下方式注销本地广播接收器:

LocalBroadcastManager.getInstance(this).unregisterReceiver(sleepTimeReceiver);
正如你可能已经注意到的那样,为了保持一致性,我还将广播接收器的名称改为以小写字母开头。
所以它是
sleepTimeReceiver
而不是
sleepTimeReceiver

你需要它做什么?你为什么不使用
startService
与你的
服务进行“对话”
?我实际上是在使用该服务播放音乐。此活动根据用户选择让服务知道何时停止播放音乐。因此您根本不需要它:从您的活动中选择
bindService
(推荐)或通过
startService
呼叫(不推荐)与您的服务交谈。嘿,谢谢您的时间。我已经在服务类中创建了一个方法,我在其中输入了停止音乐的代码,并在必要时调用该方法。我现在能够解决该问题,但仍然无法理解为什么没有收到该广播意图。您需要它们做什么?你为什么不使用
startService
与你的
服务进行“对话”
?我实际上是在使用该服务播放音乐。此活动根据用户选择让服务知道何时停止播放音乐。因此您根本不需要它:从您的活动中选择
bindService
(推荐)或通过
startService
呼叫(不推荐)与您的服务交谈。嘿,谢谢您的时间。我在服务类中创建了一个方法,我在其中输入了停止音乐的代码,并在必要时调用该方法。我现在能够解决该问题,但仍然无法理解为什么没有收到该广播意图。是的,我已经使用不同的活动启动了服务。这不是一个问题。您的广播没有获得意图,因为您在
newintent(这个,MyService.class)中指定MyService作为它的组件。尝试使用空构造函数,意图会转到您的接收者。我尝试了您建议的方法,但它仍然没有收到意图。是的,我已经使用其他活动启动了服务。这不是一个问题。您的广播没有获得意图,因为您在
newintent(这个,MyService.class)中指定MyService作为它的组件。尝试使用空构造函数,意图就会转到你的接收者。我尝试了你建议的方法,但它仍然没有收到意图。