06-30 20:06:08.251 6892-6892/com.test.aidl E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.test.aidl, PID: 6892
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.test.aidl/com.test.aidl.MainActivity}: java.lang.IllegalArgumentException: Service Intent must be explicit: Intent { act=com.example.calculate.CalculateService (has extras) }
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2421)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2481)
at android.app.ActivityThread.access$900(ActivityThread.java:153)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1349)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5432)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:735)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:625)
Caused by: java.lang.IllegalArgumentException: Service Intent must be explicit: Intent { act=com.example.calculate.CalculateService (has extras) }
at android.app.ContextImpl.validateServiceIntent(ContextImpl.java:1209)
at android.app.ContextImpl.bindServiceCommon(ContextImpl.java:1308)
at android.app.ContextImpl.bindService(ContextImpl.java:1286)
at android.content.ContextWrapper.bindService(ContextWrapper.java:604)
at com.test.aidl.MainActivity.onCreate(MainActivity.java:53)
at android.app.Activity.performCreate(Activity.java:6303)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1108)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2374)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2481)
at android.app.ActivityThread.access$900(ActivityThread.java:153)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1349)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5432)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:735)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:625)
Android 5.0程序service必须显式调用,否则就会报出上面异常信息:Service Intent must be explicit
解决办法有两个,如下所示:
1、设置Action和packageName:
参考代码如下:
Intent mIntent = new Intent();
mIntent.setAction("XXX.XXX.XXX");//你定义的service的action
mIntent.setPackage("xxxxxxx");//这里你需要设置你应用的包名
context.startService(mIntent);
2、将隐式启动转换为显示启动:
Intent intent = new Intent(context, IService.class);
context.startService(eintent);
如有错误欢迎指出来,一起学习。