이 질문은 이전에 묻지 만 모든 답변을 살펴본 결과 문제를 해결할 수 없었습니다.IntentService에서 OnHandleIntent()가 호출되지 않았습니다.
BroadcastReceiver가 시작되면 IntentService onHandleIntent()가 호출되지 않습니다. 이상하게도 생성자가 실행됩니다 (Log 출력에서 볼 수 있듯이). 이 내 코드입니다.
이 NoLiSeA.class가 가 (이 클래스는 내 서비스를 시작하는 브로드 캐스트 리시버를 포함)
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
그래서 아래의 논의를 기반으로, 나는 브로드 캐스트 리시버에서 다음 코드 줄에 문제를 좁힐 수 있었다 :
i.putExtra("sbn", sbn)
만약 그것을 제거, 즉 intentService 내 onHandleIntent() 메서드가 실행되지 않습니다 즉, 의도에 엑스트라를 추가합니다.
이 포함 된 경우, onHandleIntent()가 실행되지 않는 StatusBarNotification 객체를 전달 왜 내 IntentService의 생성자에서)에 Log.d (가 로그 캣에
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
어떤 아이디어를 기록 다음 , Intellent를 통해 Parcelable을 구현하는 Intent가 작동하지 않습니까? 이상하게도 내 인벤토리 (코드 참조)를 통해 내 toProcess() 메소드에서 동일한 StatusBarNotfication sbn 객체가 제대로 작동하지 않습니다.
''notificationForwarder'가 실제로 실행되는 로그를 확인 했습니까? 아마도 수신기를 등록하는 것을 잊었을 것입니다. 'onStartCommand'가 실행되지 않았을 때 서비스가 시작되지 않거나 그 반대가됩니다. 생성자에서'Log.d ("source", "", new Exception())'를 실행하여 생성자를 생성하는 방법을 찾아 낼 수도 있습니다. – zapl
@zapl 그래서 생성자에 Log.d()를 추가하고 위에 게시 된 예외를 수신합니다. 그러나 나는 예외를 이해하지 못한다. 도움이 되시면 감사하겠습니다. 좋은 제안 주셔서 감사합니다. – REG1
@AADTechnical 브로드 캐스트를 보내는 방법을 추가했습니다. – REG1