如何解决Android 5.0中出现的警告:Service Intent must be explicit

如何解决Android 5.0中出现的警告:Service Intent must be explicit
有两种解决方法:
1、设置Action和packageName:
参考代码如下:
Intent mIntent =  new Intent();
mIntent.setAction("XXX.XXX.XXX"); // 你定义的service的action
mIntent.setPackage(getPackageName()); // 这里你需要设置你应用的包名
context.startService(mIntent);
此方式是google官方推荐使用的解决方法。

2、将隐式启动转换为显示启动:
public  static Intent getExplicitIntent(Context context, Intent implicitIntent) {
        PackageManager pm = context.getPackageManager();
        List<ResolveInfo> resolveInfo = pm.queryIntentServices(implicitIntent, 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(implicitIntent);
        explicitIntent.setComponent(component);
         return explicitIntent;
    }
调用方式如下:
Intent mIntent =  new Intent();
mIntent.setAction("XXX.XXX.XXX");
Intent eintent =  new Intent(getExplicitIntent(mContext,mIntent));
context.startService(eintent);

你可能感兴趣的:(如何解决Android 5.0中出现的警告:Service Intent must be explicit)