[TOC]
Android5.0以上不支持隐式启动服务,有常用的两种解决办法。
将隐式启动转换为显式启动,兼容编译sdk5.0以后版本
| 12
 
 | context.bindService(getExplicitIntent(mContext,new Intent(GPSBOARDCONTROL)),serviceConnection, Context.BIND_AUTO_CREATE);
 
 | 
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 
 | //将隐式启动转换为显式启动,兼容编译sdk5.0以后版本public Intent getExplicitIntent(Context context,Intent implicitIntent){
 PackageManager pm = context.getPackageManager();
 List<ResolveInfo> resolveInfos = pm.queryIntentServices(implicitIntent, 0);
 if (resolveInfos == null || resolveInfos.size()!= 1) {
 return null;
 }
 Intent explicitIntent = null;
 ResolveInfo info = resolveInfos.get(0);
 String packageName = info.serviceInfo.packageName;
 String className = info.serviceInfo.name;
 ComponentName component = new ComponentName(packageName,className);
 explicitIntent = new Intent(implicitIntent);
 explicitIntent.setComponent(component);
 return explicitIntent;
 }
 
 | 
显式通过包名来启动服务
| 12
 3
 4
 
 | Intent intent = new Intent("com.frewen.demo.service.ACTION");intent.setAction(GPSBOARDCONTROL);//Service能够匹配的Action
 intent.setPackage("com.frewen.demo.service");//应用的包名
 context.bindService(intent,serviceConnection, Context.BIND_AUTO_CREATE);
 
 |