当我们在5.0上使用隐式启动服务的时候,会爆出这个错误。这可能是出于某种保护措施?
异常说明是“服务类的Intent不可以使用隐式启动”。
很明显,我们只要把隐式启动改成显示启动就好了,网上有两种解决办法,我这里直接提供google推荐方式的源码,复制粘贴导包即可使用:
public static Intent getExplicitIntent(Context context, Intent implicitIntent) {
// 检索所有能够响应该Intent的服务类
PackageManager pm = context.getPackageManager();
List<ResolveInfo> resolveInfo = pm.queryIntentServices(implicitIntent, 0);
// 如果查询结果不唯一,退出
if (resolveInfo == null || resolveInfo.size() != 1) {
return null;
}
// 获取组件的信息,然后创建对应的ComponentName对象
ResolveInfo serviceInfo = resolveInfo.get(0);
String packageName = serviceInfo.serviceInfo.packageName;
String className = serviceInfo.serviceInfo.name;
ComponentName component = new ComponentName(packageName, className);
// 重用旧Intent对象的信息来新建一个Intent
Intent explicitIntent = new Intent(implicitIntent);
// 将前面得到的CompontName加入新intent
explicitIntent.setComponent(component);
return explicitIntent;
}