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);
}