隐式声明Intent启动Service是不安全的
ContextImpl源码指出,Android5.0隐式声明Intent启动Service直接抛出异常:
private void validateServiceIntent(Intent service) { if (service.getComponent() == null && service.getPackage() == null) { if (getApplicationInfo().targetSdkVersion >= Build.VERSION_CODES.LOLLIPOP) { IllegalArgumentException ex = new IllegalArgumentException( "Service Intent must be explicit: " + service); throw ex; } else { Log.w(TAG, "Implicit intents with startService are not safe: " + service + " " + Debug.getCallers(2, 3)); } } }解决方法:
1. Intent intent = new Intent(); ComponentName componentName = new ComponentName(pkgName,serviceName); intent.setComponent(componentName); context.startService(intent);
2.Intent mIntent = new Intent(); mIntent.setAction("XXX.XXX.XXX");//Service能够匹配的Action mIntent.setPackage(pkgName);//应用的包名 context.startService(mIntent);
