Я знаю, что этот вопрос задавали раньше, но я был над всеми ответами, которые мог найти и до сих пор не смог решить проблему.
Проблема заключается в том, что при запуске BroadcastReceiver IntentService onHandleIntent() не вызывается. Довольно странно, что конструктор запускается (как я могу видеть по выходному сигналу журнала). Это мой код:
NoLiSeA.class (Этот класс содержит BroadcastReceiver, который начинает мою службу)
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 (Это IntentService. OnHandleIntent() не вызывается, как я вижу из-за отсутствия текста журнала в консоли.)
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
Итак, основываясь на обсуждениях ниже, я смог сузить проблему до следующей строки кода в BroadCastReceiver:
i.putExtra("sbn", sbn)
Если я удалю его, т.е. не добавит никаких дополнительных компонентов в намерение, тогда мой метод onHandleIntent() в моем IntentService запустится.
Если он включен, onHandleIntent() не запускается и записывается в logcat с помощью Log.d() в конструкторе моего IntentService
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
Любые идеи, почему передача объекта StatusBarNotification, реализующего Parcelable, в IntentService через Intent не работает? Как ни странно, трансляция одного объекта sbn StatusBarNotfication из моего метода toProcess() с помощью намерения (см. Код) действительно работает.