0
我的服务:服务不听某些广播
@Override
public void onCreate() {
if (debug_mode) {Log.i(TAG,"onCreate");}
super.onCreate();
// set receivers
m_filter.addAction("PREPARE_AUDIO");
m_receiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
if (debug_mode) {Log.i(TAG,"broadcast received: " + intent.getAction());}
if (intent.getAction().equals("PREPARE_AUDIO")) {
set_up_audio();
}
}
};
registerReceiver(m_receiver, m_filter);
}
和我的活动:
@Override
protected void onStart() {
super.onCreate(savedInstanceState);
if (debug_mode) Log.i(TAG, "onCreate");
setContentView(R.layout.activity_guide);
// start service
startService(new Intent(this, PlayerService.class));
}
@Override
protected void onStart() {
if (debug_mode) {Log.i(TAG,"onStart");}
super.onStart();
// prepare audio
Intent intent = new Intent();
intent.setAction("PREPARE_AUDIO");
sendBroadcast(intent);
}
这不会引发我的服务BroadcastReceiver
。如果我将代码放在onCreate
或onResume
上,它将不会触发它。它会触发它,但是,如果放在例如与Button
关联的某个Listener
或活动的onStop
回调。这是为什么?
据推测,当onCreate(),onStart()或onResume()被调用时,你的服务还没有运行。 – CommonsWare
以及我如何确保它正在运行?我使用启动服务的代码编辑了我的答案 –
更简单的解决方案是不要尽快发送广播。你不应该这样做。如果你需要这个服务来做一些事情,可以在'onStartCommand()'中做。 – CommonsWare