android5.0以上隱式啓動Service

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章