Mein Service:Service hört nicht auf bestimmte Sendungen
@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);
}
und meine Aktivität:
@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);
}
Dies wird die BroadcastReceiver
in meinem Dienst nicht auslösen. Es wird auch nicht ausgelöst, wenn ich den Code auf onCreate
oder onResume
setze. Es wird es jedoch auslösen, wenn z. auf einigen Listener
verbunden mit einem Button
, oder in der onStop
Rückruf der Aktivität. Warum das?
Vermutlich läuft Ihr Dienst noch nicht, wenn "onCreate()", "onStart()" oder "onResume()" aufgerufen werden. – CommonsWare
und wie kann ich sicherstellen, dass es läuft? Ich habe meine Antwort mit dem Code bearbeitet, der den Dienst startet –
Die einfachere Lösung ist es, nicht zu versuchen, die Sendung so bald zu senden. Du solltest das nicht tun müssen. Wenn Sie den Dienst benötigen, um etwas sofort zu tun, tun Sie dies in 'onStartCommand()'. – CommonsWare