《完美解决系列》Android5.0以上 Implicit intents with startService are not safe

【《完美解决系列》Android5.0以上 Implicit intents with startService are not safe】知识养成了思想,思想同时又在融化知识。这篇文章主要讲述《完美解决系列》Android5.0以上 Implicit intents with startService are not safe相关的知识,希望能为你提供帮助。
在android6.0上,使用了以下代码:

Intent intent = new Intent(); intent.setAction("xxx.server"); bindService(intent, mConn, Context.BIND_AUTO_CREATE);

提示了警告的异常:
Implicit intents with startService are not safe

查了一下源码,原来在5.0上就必须强制使用显示方式来启动Service。
private void validateServiceIntent(Intent service) { if (service.getComponent() == null & & service.getPackage() == null) { if (getApplicationInfo().targetSdkVersion > = Build.VERSION_CODES.LOLLIPOP) { IllegalArgumentException ex = new IllegalArgumentException( "Service Intent must be explicit: " + service); throw ex; } else { Log.w(TAG, "Implicit intents with startService are not safe: " + service + " " + Debug.getCallers(2, 3)); } } }

解决方法:设置Action的同时,还需要设置启动或绑定此Service类的packageName。 
我们在此处使用系统的getPackageName函数来获取包名即可。
Intent intent = new Intent(); intent.setAction("xxx.server"); intent.setPackage(context.getPackageName()); bindService(intent, mConn, Context.BIND_AUTO_CREATE);




    推荐阅读