(原创)解决报错:Service Intent must be explicit: Intent

最近遇到这个报错,是在startService中出现的,下面提供两种解决方法

第一种:

给你启动Service的intent添加包名

注意,这个包名是被启动的Service的包名

如果是应用启动自身内部的Service,填写自己的包名即可

就像这样:

intent.setPackage(context.getPackageName());
context.startService(intent);  

第二种:

使用下面这个方法,传入自己的intent

返回的intent就可以直接使用了

public static Intent createExplicitFromImplicitIntent(Context context, Intent implicitIntent) {
        // Retrieve all services that can match the given intent
        PackageManager pm = context.getPackageManager();
        List<ResolveInfo> resolveInfo = pm.queryIntentServices(implicitIntent, 0);

        // Make sure only one match was found
        if (resolveInfo == null || resolveInfo.size() != 1) {
            return null;
        }

        // Get component info and create ComponentName
        ResolveInfo serviceInfo = resolveInfo.get(0);
        String packageName = serviceInfo.serviceInfo.packageName;
        String className = serviceInfo.serviceInfo.name;
        ComponentName component = new ComponentName(packageName, className);

        // Create a new intent. Use the old one for extras and such reuse
        Intent explicitIntent = new Intent(implicitIntent);

        // Set the component to be explicit
        explicitIntent.setComponent(component);

        return explicitIntent;
    }

猜你喜欢

转载自blog.csdn.net/Android_xiong_st/article/details/105840945