본문 바로가기

프로그래밍/안드로이드(Android)

[Android] 롤리팝 bindService 명시적으로 하기 (java.lang.IllegalArgumentException: Service Intent must be explicit)

336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

[Android] bindService 명시적으로 보내기


안드로이드 SDK 버전 21 (롤리팝) 부터 bindService를 암시적으로 보내게 되면 아래와 같은 오류가 뜨면서 앱 중지가 발생한다.


E/AndroidRuntime(30479): Process: com.lguplus.emotionguitestapp, PID: 30479

E/AndroidRuntime(30479): java.lang.RuntimeException: Unable to start activity 

E/AndroidRuntime(30479): Caused by: java.lang.IllegalArgumentException: Service Intent must be explicit: Intent { act=com.lguplus.emotiongui.service }

E/AndroidRuntime(30479): at android.app.ContextImpl.validateServiceIntent(ContextImpl.java:2039)

E/AndroidRuntime(30479): at android.app.ContextImpl.bindServiceCommon(ContextImpl.java:2147)

E/AndroidRuntime(30479): at android.app.ContextImpl.bindService(ContextImpl.java:2125)

E/AndroidRuntime(30479): at android.content.ContextWrapper.bindService(ContextWrapper.java:559)


내용인 즉 서비스를 명시 해라!! 


예로 "com.kkomanjell.app" 에 service 를 intent로 날릴때 

롤리팝 이전에는 아래처럼 날려도 문제가 되지 않았다.


Intent intent = new Intent().setAction("com.kkomanjell.app.service");

activity.bindService(intent, serviceConnection, Context.BIND_AUTO_CREATE);



하지만 롤리팝 이후 부터는 반드시 문제가 발생한다.

아래 처럼 타겟이 무엇인지 명시를 해줘야 문제가 발생하지 않는다.


Intent intent = new Intent().setAction("com.kkomanjell.app.service");

intent.setPackage("com.kkomanjell.app");

activity.bindService(intent, serviceConnection, Context.BIND_AUTO_CREATE);