【发布时间】:2016-06-20 19:18:07
【问题描述】:
我知道有很多与此主题相关的问题,但似乎对我没有任何帮助。
我有一个服务,它接收来自多个活动的广播,我正在对收到的每个广播使用不同的操作来区分它们。
这是我的代码
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 方法。有人可以帮我解决这个问题。这个简单的问题已经困扰了我好几个小时了。
【问题讨论】:
-
您需要
BroadcastReceiver做什么?为什么不使用startService与您的Service“交谈”? -
我实际上是在使用该服务来播放音乐。此活动让服务知道何时根据用户选择停止播放音乐。
-
所以你根本不需要它:要么从你的活动中
bindService(推荐),要么通过startService呼叫与你的服务交谈(不推荐) -
您好,感谢您抽出宝贵时间。我在服务类中创建了一个方法,我在其中放置了停止音乐的代码,并在必要时调用该方法。
-
我现在能够解决这个问题,但仍然无法弄清楚为什么没有收到广播意图。
标签: java android android-intent android-broadcastreceiver