问题描述:
java.lang.IllegalArgumentException: Service Intent must be explicit: Intent { act=com.xk.file.FIRST_SERVICE }
Service启动的方式有两种:显式启动、隐式启动。
1、隐式启动
在AndroidManifest.xml注册时需要添加指定的action。
<service android:name=".service">
<intent-filer>
<action android:name="com.android.service"/>
<intent-filer>
</service>
代码中调用时采用:
Intent serviceIntent=new Intent();
serviceIntent.setAction("com.android.service");
2、显示启动
如果在同一个包中。两者都可以用。在不同包时。只能用隐式启动。
Intent serviceIntent=new Intent(this,service.class);
startService(serviceIntent);
但是在安卓5.0时候,采用隐式启动时,会出现java.lang.IllegalArgumentException: Service Intent must be explicit异常。也就是说Service的Intent必须明确。
解决方法就是给Intent设置一下具体的包名,指明具体是哪个包启动的Service。
例如:
Intent serviceIntent=new Intent();
serviceIntent.setPackage("com.android.vending")
serviceIntent.setAction("com.android.service");
startService(serviceIntent);