《完美解决系列》Android5.0以上 Implicit intents with startService are not safe
Posted 荣耀王者
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了《完美解决系列》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);
以上是关于《完美解决系列》Android5.0以上 Implicit intents with startService are not safe的主要内容,如果未能解决你的问题,请参考以下文章
解决Android5.0以后DataPicker选择时间无效的bug。
android5.0以上对于APP_SWITCH和HOME键的处理