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

我的Android进阶之旅------>如何解决Android 5.0中出现的警告: Service Intent must be explicit: 摘要 本文分析了在Android 5.1系统上运行时出现的"Service Intent must be explicit"错误。该错误是由于从Android 5.0(Lollipop)开始,系统要求必须使用显式Intent启动Service。错误发生在调用startService()时,当Intent未设置Component或Package属性时,系统会抛出IllegalArgumentException异常。文中通过分析Android源码(ContextImpl.java)展示了具体 阅读详情
有些时候我们使用Service的时需要采用隐私启动的方式,但是Android 5.0一出来后,其中有个特性就是Service Intent  must be explitict,也就是说从Lollipop开始,service服务必须采用显示方式启动。
而android源码是这样写的(源码位置:sdk/sources/android-21/android/app/ContextImpl.java):
  1. private void validateServiceIntent(Intent service) {
  2.         if (service.getComponent() == null && service.getPackage() == null) {
  3.             if (getApplicationInfo().targetSdkVersion >= Build.VERSION_CODES.LOLLIPOP) {
  4.                 IllegalArgumentException ex = new IllegalArgumentException(
  5.                         "Service Intent must be explicit: " + service);
  6.                 throw ex;
  7.             } else {
  8.                 Log.w(TAG, "Implicit intents with startService are not safe: " + service
  9.                         + " " + Debug.getCallers(2, 3));
  10.             }
  11.         }
  12.     }
复制代码

既然,源码里是这样写的,那么这里有两种解决方法:

1、设置Action和packageName:

参考代码如下:
  1. Intent mIntent = new Intent();
  2. mIntent.setAction("XXX.XXX.XXX");//你定义的service的action
  3. mIntent.setPackage(getPackageName());//这里你需要设置你应用的包名
  4. context.startService(mIntent);
复制代码


此方式是google官方推荐使用的解决方法。


在此附上地址供大家参考:http://developer.android.com/goo ... tml#billing-service,有兴趣的可以去看看。

2、将隐式启动转换为显示启动: --参考地址: http://stackoverflow.com/a/26318757/1446466
  1. public static Intent getExplicitIntent(Context context, Intent implicitIntent) {
  2.         // Retrieve all services that can match the given intent
  3.         PackageManager pm = context.getPackageManager();
  4.         List<ResolveInfo> resolveInfo = pm.queryIntentServices(implicitIntent, 0);
  5.         // Make sure only one match was found
  6.         if (resolveInfo == null || resolveInfo.size() != 1) {
  7.             return null;
  8.         }
  9.         // Get component info and create ComponentName
  10.         ResolveInfo serviceInfo = resolveInfo.get(0);
  11.         String packageName = serviceInfo.serviceInfo.packageName;
  12.         String className = serviceInfo.serviceInfo.name;
  13.         ComponentName component = new ComponentName(packageName, className);
  14.         // Create a new intent. Use the old one for extras and such reuse
  15.         Intent explicitIntent = new Intent(implicitIntent);
  16.         // Set the component to be explicit
  17.         explicitIntent.setComponent(component);
  18.         return explicitIntent;
  19.     }
复制代码
调用方式如下:
  1. Intent mIntent = new Intent();
  2. mIntent.setAction("XXX.XXX.XXX");
  3. Intent eintent = new Intent(getExplicitIntent(mContext,mIntent));
  4. context.startService(eintent);
复制代码


实现自动打包py及替换pyinstaller --add-data参数的方法 阅读详情

相关推荐

视频教程-SAP S4 HANA FICO COPA 获利能力分析-ERP

SAP S4 HANA FICO COPA 获利能力分析 从业超过8年的SA...

weixin_33456805的博客 1442

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

1.错误描述 今天在Android4.4 的小米4手机上运行我的程序的时候没有报错,而在Android 5.1的华为P7上运行我的程序的时候报了以下的错误,错误提示如下: E/AndroidRuntime(12500): FATAL EXCEPTION: main E/AndroidRuntime(12500): Process: com.xtc.watch, PID: 12500 E/A

qq_15796477的博客 466

偏最小二乘结构方程(PLS-SEM)_TomatoSCI分析日记

①模型整体拟合指标(Goodness-of-Fit, GOF),这个可以看做整体的R方了,上限是1;②指标载荷的具体值;然而,当数据中包含潜变量(即由多个观测指标组合而成的综合概念)时,贝叶斯结构方程不太适用。指标过少(1-2 个)会削弱潜变量的解释力,而指标过多可能增加噪声,影响模型稳定性。如果指标较多,可考虑进一步划分潜变量,但应确保每个指标有意义。掌握这两类方法后,在处理多变量、因果或路径分析研究时,可以根据数据特点与研究需求灵活选择。对于一般的多变量研究,这两类结构方程均为常用且有效的分析方案。

qq_44684643的博客 2011

Android中提示:Service Intent must be explicit:Intent

场景 在使用bindService时第一个intent参数在声明时使用的 String actionName = "com.shoushuo.android.tts.intent.action.InvokeTts"; Intent intent = new Intent(actionName); this.bindService(intent, connection, Context.BIND_AUTO_CREATE); 然后提示: Service Intent must be explicit:

BADAO_LIUMANG_QIZHI的博客 1226

【DSP】【工程实战】从零构建C6678多核工程:CCS环境配置与启动模式详解

本文详细介绍了在CCS开发环境中从零构建TMS320C6678多核DSP工程的完整流程。内容涵盖KeyStone架构解析、工程创建、基础代码编写、链接命令文件配置、仿真器调试,并重点深入讲解了包括I2C EEPROM在内的多种一级启动模式原理与配置方法,为开发者提供了一套清晰、可复用的实战指南。

weixin_29164185的博客 418

图像修复的万能模型:用Instruct-IPT统一解决去雨、去雾、去模糊三大难题

从原理到实战,你已经掌握了Instruct-IPT的核心逻辑和使用方法。它不仅能一站式解决多种图像退化问题,还能通过文本指令灵活控制,是图像恢复领域的“多面手”。现在,不妨找几张有雨雪、雾霾、模糊问题的图像,用Instruct-IPT亲手试试效果。当你看到模糊的图像变得清晰,被雨雾遮挡的细节重新浮现时,你会真切感受到这项技术的魅力。后续还可以尝试调整文本指令的描述方式,看看模型的响应有什么变化——探索的过程,就是你技术进阶的最好见证。

m0_71589036的博客 226

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

最近遇到这个报错,是在startService中出现的,下面提供两种解决方法 第一种: 给你启动Service的intent添加包名 注意,这个包名是被启动的Service的包名 如果是应用启动自身内部的Service,填写自己的包名即可 就像这样: intent.setPackage(context.getPackageName()); context.startService(i...

Android_xiong_st的博客 1436

化工管道设计软件:CAESAR II二次开发_(6).API接口与函数库

自定义函数库是开发者根据特定需求编写的函数集合。这些函数可以扩展CAESAR II的功能,实现更复杂的管道设计任务。自定义函数库通常需要开发者具备一定的编程基础,能够理解和编写与CAESAR II接口兼容的代码。定义函数:在Python或其他编程语言中定义所需的函数。注册函数:将自定义函数注册到CAESAR II的函数库中。调用函数:在CAESAR II中调用自定义函数,实现特定功能。假设我们需要创建一个自定义函数库,用于批量修改管道节点的坐标。定义函数:在Python中定义一个函数,用于批量修改节点坐标。

kkchenjj的博客 1728

Implicit intents with startService are not safe错误的解决方式

原文链接:http://www.eoeandroid.com/thread-568853-1-1.html 有些时候我们使用Service的时需要采用隐私启动的方式,但是Android 5.0一出来后,其中有个特性就是Service Intent  must be explitict,也就是说从Lollipop开始,service服务必须采用显示方式启动。 而android源码是这

happyrabbit456的专栏 875

uniapp:实现扫描二维码+自定义扫描框+扫一扫功能,支持扫码识别二维码、条形码(条码)、微信/支付宝等二维码功能,自定义扫码页面可添加按钮或文字展示布局(移动端H5网页/小程序/安卓苹果APP端)

UNI-APP实现扫描二维码,uniapp扫描条形码,uniapp实现扫一扫功能,扫码成功后跳转页面,uniApp扫描条码,uniApp-H5 使用摄像头扫码功能(扫一扫),实现手机扫描二维码并跳转全过程示例代码,用户扫码后自动跳转到链接,uniapp怎么调用扫一扫功能,uniapp实现扫一扫功能,uniapp请求相机使用权限,扫一扫权限申请,uniapp调用摄像头扫码,uniapp实现调用相机扫码,UniApp 实现扫描二维码,uniapp APP安卓苹果ios实现扫码扫一扫,Uniapp微信小程序扫描二

✅ 精选推荐文章 4708

uniapp [移动端H5网页] - 强力解决弹起软键盘后页面被挤压变形或页面整体上移问题,点击input输入框键盘弹出底部被上推往上顶遮挡及各种问题(兼容安卓苹果ios手机,微信公众号网页也适用)

uni-app,h5网页,input输入框组件,uniapp h5软键盘弹出,uni-app 输入框,键盘弹起时页面整体上移问题,uni,H5页面,解决软键盘弹起页面被挤压、被往顶的问题,解决uni-app 输入框,键盘弹起时页面整体上移问题,uniapp调用手机系统软键盘,页面窗口被顶起,布局定位失效,解决uniapp软键盘弹起导致页面fixed定位元素被顶上去,输入法软键盘弹起,窗口顶起,变形解决办法,UniApp中input组件在IOS设备上弹出软键盘时页面整体上移问题的解决方案,以及input组件聚

🏆 前端领域优质创作者 1万+

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

有些时候我们使用Service的时需要采用隐私启动的方式,但是Android 5.0一出来后,其中有个特性就是Service Intent  must be explitict,也就是说从Lollipop开始,service服务必须采用显示方式启动。 而android源码是这样写的(源码位置:sdk/sources/android-21/android/app/ContextImpl.jav

王月莹的专栏 1239

各向同性、VTI、TTI以及双相介质波场数值模拟

各位读者,大家好!在今天的文章中,我将介绍关于波场数值模拟中的各向同性、VTI(垂直横向等参数介质)、TTI(倾斜横向等参数介质)以及双相介质的基本概念。同时,我也会提供一些基础的Fortran代码片段,供大家了解和学习。

qq_38334677的博客 1707

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

Android 5.0程序运行报Service Intent must be explicit错误,原因是5.0的service必须显式调用 改成 Intent intent = new Intent(mContext, IService.class); 或者Intent intent = new Intent(); intent.setclass(xx.xx,xx.xx); ...

weixin_30881367的博客 98

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

上一篇: 自定义seekbar中,thumb被覆盖掉一部分问题
下一篇: Android:ImageView图片缩放、居中
vrix
博客等级 码龄24年 673粉丝 167原创
评论 8
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值