android5.0以上google不允许隐式启动Service,利用以前的方式无法达到效果。但是在项目中不同的Module之间启动服务组件是很常见的事情,显示启动肯定是无法达到的,只能选择隐式启动。我找到了一种解决方案:隐式Intent转为显示Intent来启动Service,亲测5.0-8.0有效,代码如下:
Intent intent = new Intent();
intent.setAction("tencent.upload.RecordService");
PackageManager pm = context.getPackageManager();
List<ResolveInfo> resolveInfo = pm.queryIntentServices(intent, 0);
if (resolveInfo == null || resolveInfo.size() != 1) {
return null;
}
ResolveInfo serviceInfo = resolveInfo.get(0);
String packageName = serviceInfo.serviceInfo.packageName;
String className = serviceInfo.serviceInfo.name;
ComponentName component = new ComponentName(packageName, className);
Intent explicitIntent = new Intent(intent);
explicitIntent.setComponent(component);
Intent intentService = new Intent(explicitIntent);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
startForegroundService(intentService);
} else {
startService(intentService);
}