android:Service Intent must be explicit: Intent { act=com.example.localservicedemo.MyLocalService }

本文探讨了Android 5.0之后Service Intent必须显式指定的问题,特别是针对远程服务的绑定方式,并提供了修改建议。

做android后台服务的远程服务时(绑定方式使用service)遇到了一个问题:
05-04 11:25:10.656: E/AndroidRuntime(1393): java.lang.IllegalArgumentException: Service Intent must be explicit: Intent { act=com.example.localservicedemo.MyLocalService }

这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述

android教材上有这样一段话:如果Service和调用服务的组件在同一个应用程序中,可以使用显示启动或隐式启动;但如果服务和调用服务的组建在不同的程序中,则只能使用隐式启动。所以我的RemoteService项目用的是隐式启动,但却报错了。

在网上搜解决方案时,发现了原因:在Android5.0之后,Service的Intent必须是要显性启动,据说这是为了防止多个Service用同样的intent-filter的情况。

解决办法是:
已经在AndroidManifest.xml中隐式声明service时,
方法一:
设置Action和packageName:
参考代码如下:
Intent mIntent = new Intent();
mIntent.setAction(“XXX.XXX.XXX”);//你定义的service的action
mIntent.setPackage(getPackageName());//这里你需要设置你应用的包名
context.startService(mIntent);
方法二:
如何解决Android 5.0中出现的警告:Service Intent must be expli
这种太麻烦不推荐

/*我的疑惑:1.绑定方式是否是有这样的规定:分同一进程和不同进程而使用显隐式
2.远程服务使用启动方式能否直接显示使用service
3.对于绑定方式使用service,因为我的解决方案是针对已经在AndroidManifest.xml中隐式声明service时的解决方案,所以远程服务绑定式能否直接显示使用service(在AndroidManifest.xml中显示配置)*/

总结一下:现在对于service的使用方式,教材上的不准确
(下面说的service端和客户端对于本地调用来说是在同一程序中的,对于远程服务来说则在不同程序中,两者类似)
启动方式:

显示启动:

service端:

<service android:name=".RandomService"/>

客户端:

Intent serviceIntent = new Intent(this, RandomService.class);
startService(serviceIntent);

隐式启动:

service端:

<service android:name=".RandomService">
            <intent-filter>
                <action android:name="edu.hrbeu.SimpleRandomServiceDemo.RandomService"/>
            </intent-filter>
</service>

客户端:

Intent serviceIntent=new Intent();
serviceIntent.setAction("com.example.remoteservicedemo.RemoteService");
serviceIntent.setPackage("com.example.remoteservicedemo");
startService(serviceIntent);                                                //android5.0后隐式启动也得写

绑定方式:
类似于启动方式,但相应位置使用的是bindService()方法

显示绑定:

service端:

<service android:name=".MathService"/>

客户端:

Intent serviceIntent = new Intent(SimpleMathServiceDemoActivity.this,MathService.class);
bindService(serviceIntent,mConnection,Context.BIND_AUTO_CREATE);

隐式绑定 我就不详细写出来了

总结有参考:启动远程service的两种方式:显示和隐式

  • Markdown和扩展Markdown简洁的语法
  • 代码块高亮
  • 图片链接和图片上传
  • LaTex数学公式
  • UML序列图和流程图
  • 离线写博客
  • 导入导出Markdown文件
  • 丰富的快捷键

快捷键

  • 加粗 Ctrl + B
  • 斜体 Ctrl + I
  • 引用 Ctrl + Q
  • 插入链接 Ctrl + L
  • 插入代码 Ctrl + K
  • 插入图片 Ctrl + G
  • 提升标题 Ctrl + H
  • 有序列表 Ctrl + O
  • 无序列表 Ctrl + U
  • 横线 Ctrl + R
  • 撤销 Ctrl + Z
  • 重做 Ctrl + Y

Markdown及扩展

Markdown 是一种轻量级标记语言,它允许人们使用易读易写的纯文本格式编写文档,然后转换成格式丰富的HTML页面。 —— [ 维基百科 ]

使用简单的符号标识不同的标题,将某些文字标记为粗体或者斜体,创建一个链接等,详细语法参考帮助?。

本编辑器支持 Markdown Extra ,  扩展了很多好用的功能。具体请参考Github.

表格

Markdown Extra 表格语法:

项目价格
Computer$1600
Phone$12
Pipe$1

可以使用冒号来定义对齐方式:

项目价格数量
Computer1600 元5
Phone12 元12
Pipe1 元234

定义列表

Markdown Extra 定义列表语法: 项目1 项目2
定义 A
定义 B
项目3
定义 C

定义 D

定义D内容

代码块

代码块语法遵循标准markdown代码,例如:

@requires_authorization
def somefunc(param1='', param2=0):
    '''A docstring'''
    if param1 > param2: # interesting
        print 'Greater'
    return (param2 - param1 + 1) or None
class SomeClass:
    pass
>>> message = '''interpreter
... prompt'''

脚注

生成一个脚注1.

目录

[TOC]来生成目录:

数学公式

使用MathJax渲染LaTex 数学公式,详见math.stackexchange.com.

  • 行内公式,数学公式为: Γ(n)=(n1)!nN Γ ( n ) = ( n − 1 ) ! ∀ n ∈ N
  • 块级公式:

x=b±b24ac2a x = − b ± b 2 − 4 a c 2 a

更多LaTex语法请参考 这儿.

UML 图:

可以渲染序列图:

Created with Raphaël 2.1.2 张三 张三 李四 李四 嘿,小四儿, 写博客了没? 李四愣了一下,说: 忙得吐血,哪有时间写。

或者流程图:

Created with Raphaël 2.1.2 开始 我的操作 确认? 结束 yes no
  • 关于 序列图 语法,参考 这儿,
  • 关于 流程图 语法,参考 这儿.

离线写博客

即使用户在没有网络的情况下,也可以通过本编辑器离线写博客(直接在曾经使用过的浏览器中输入write.blog.youkuaiyun.com/mdeditor即可。Markdown编辑器使用浏览器离线存储将内容保存在本地。

用户写博客的过程中,内容实时保存在浏览器缓存中,在用户关闭浏览器或者其它异常情况下,内容不会丢失。用户再次打开浏览器时,会显示上次用户正在编辑的没有发表的内容。

博客发表后,本地缓存将被删除。 

用户可以选择 把正在写的博客保存到服务器草稿箱,即使换浏览器或者清除缓存,内容也不会丢失。

注意:虽然浏览器存储大部分时候都比较可靠,但为了您的数据安全,在联网后,请务必及时发表或者保存到服务器草稿箱

浏览器兼容

  1. 目前,本编辑器对Chrome浏览器支持最为完整。建议大家使用较新版本的Chrome。
  2. IE9以下不支持
  3. IE9,10,11存在以下问题
    1. 不支持离线功能
    2. IE9不支持文件导入导出
    3. IE10不支持拖拽文件导入


  1. 这里是 脚注内容.
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值