在学习Service组件时,按照书上的例子的,写好,运行点击后,应用闪退,后台报错
去网上找了下,发现是因为android 5.0存在的问题,正好我编译程序的sdk是5.0.1的。
Android 5.0一出来后,其中有个特性就是Service Intent must be explitict,也就是说从Lollipop开始,service服务必须采用显示方式启动。
而android源码是这样写的(源码位置:sdk/sources/android-21/android/app/ContextImpl.java):
- 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));
- }
- }
- }
1、设置Action和packageName:
参考代码如下:
此方式是google官方推荐使用的解决方法。
在此附上地址供大家参考:http://developer.android.com/goo ... tml#billing-service,有兴趣的可以去看看。
注意:这里的packageName是当前应用的包名,即AndroidManifest.xml中那个package值,不能是你service所在那个包路径
2、将隐式启动转换为显示启动:--参考地址:http://stackoverflow.com/a/26318757/1446466
详细地址:http://blog.csdn.net/vrix/article/details/45289207