Ich weiß, dass diese Frage schon einmal gestellt wurde, aber ich habe über alle Antworten, die ich finden konnte und noch nicht das Problem lösen konnte.OnHandleIntent() nicht in IntentService
Das Problem ist, dass beim Starten von BroadcastReceiver der IntentService onHandleIntent() nicht aufgerufen wird. Seltsamerweise läuft der Konstruktor (wie ich an der Log-Ausgabe sehen kann). Dies ist mein Code:.
NoLiSeA.class (Diese Klasse enthält die BroadcastReceiver, dass mein Dienst gestartet wird)
public void toProcess(StatusBarNotification sbn) {
LocalBroadcastManager.getInstance(this).registerReceiver(notificationForwarder, new IntentFilter("to_forward"));
Intent intent = new Intent("to_forward");
intent.putExtra("sbn", sbn);
LocalBroadcastManager.getInstance(this).sendBroadcast(intent);
Log.i("NoLiSe.TAG", "toProcess");
}
private BroadcastReceiver notificationForwarder = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
Log.i("NoLiSe.TAG", "BroadCastReceiver.onReceive");
Intent i = new Intent(context, CoreTwoA.class);
i.putExtras(intent);
startService(i);
}
}
};
CoreTwoA.class (Dies ist die IntentService onHandleIntent() ist nicht angerufen, wie ich sehen kann, weil kein Log-Text in der Konsole vorhanden ist.)
public class CoreTwoA extends IntentService {
private TextToSpeech mtts;
public CoreTwoA() {
super("TheCoreWorker");
Log.d("source", "exception", new Exception());
Log.i("CoreTwoA.TAG", "Constructor");
}
@Override
protected void onHandleIntent(Intent intent) {
Log.i("CoreTwoA.TAG", "onHandleIntent");
}
}
AndroidManifest.xml
<service
android:name=".CoreTwoA"
android:label="@string/service_name"
android:exported="false">
</service>
UPDATE
auf Diskussionen unter So basiert, konnte ich das Problem auf die folgende Codezeile in der BroadCastReceiver verengen:
i.putExtra("sbn", sbn)
Wenn ich es entferne, dh keine Extras zu der Absicht hinzufügen, dann wird meine onHandleIntent() Methode in meinem IntentService ausgeführt.
Wenn es enthalten ist, onHandleIntent() nicht ausgeführt wird und die folgenden von der Log.d() im Konstruktor meines IntentService zu logcat geschrieben
06-10 19:40:35.355 25094-25094/com.dezainapps.myapp D/source: exception
java.lang.Exception
at com.dezainapps.myapp.CoreTwoA.<init>(CoreTwoA.java:20)
at java.lang.Class.newInstance(Native Method)
at android.app.ActivityThread.handleCreateService(ActivityThread.java:2859)
at android.app.ActivityThread.-wrap4(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1427)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5417)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
06-10 19:40:35.355 25094-25094/com.dezainapps.myapp I/CoreTwoA.TAG: Constructor
Irgendwelche Ideen, warum ein StatusBarNotification Objekt übergeben , das Parcelable implementiert, zu einem IntentService über einen Intent funktioniert nicht? Seltsam genug funktioniert das Broadcasting der gleichen StatusBarNotfication sbn Objekt von meiner ToProcess() -Methode über eine Absicht (siehe Code).
Haben Sie in einem Protokoll überprüft, dass 'notificationForwarder' tatsächlich ausgeführt wird? Vielleicht hast du vergessen, den Empfänger zu registrieren. Der Dienst wird nicht gestartet, wenn 'onStartCommand' nicht ausgeführt wird oder umgekehrt. Sie können auch 'Log.d (" source "," ", new Exception())' im Konstruktor verwenden, um herauszufinden, was es erzeugt. – zapl
@zapl So habe ich die Log.d() zum Konstruktor hinzugefügt und jetzt erhalte ich die oben genannte Ausnahme. Allerdings verstehe ich die Ausnahme nicht. Würde mich über Hilfe freuen. Danke für den guten Vorschlag. – REG1
@AADTechnical Ich habe die Methode hinzugefügt, die den Broadcast sendet – REG1