8.1.3 在BroadcastReceiver中启动Service
《Android/OPhone开发完全讲义》第8章Android服务,本章主要介绍了Android系统 中的服务(Service)技术。Service是Android中4个应用程序组件之一。在Android系统内部提供了很多的系统服务,通过这些系统 服务,可以实现更为复杂的功能,例如,监听来电、重力感应等。本节为大家介绍在BroadcastReceiver中启动Service。
AD:
8.1.3 在BroadcastReceiver中启动Service
本节的例子代码所在的工程目录是src\ch08\ch08_startupservice
在8.1.1节和8.1.2节都是先启动了一个Activity,然后在Activity中启动服务。如果是这样,在启动服务时必须要先启动一个 Activity。在很多时候这样做有些多余,阅读完第7章的内容,会发现实例43可以利用Broadcast Receiver在Android系统启动时运行一个Activity。也许我们会从中得到一些启发,既然可以在Broadcast Receiver中启动Activity,为什么不能启动Service呢?说做就做,现在让我们来验证一下这个想法。
先编写一个服务类,这个服务类没什么特别的,仍然使用前面两节编写的MyService类即可。在AndroidManifest.xml文件中配置MyService类的代码也相同。
下面来完成最关键的一步,就是建立一个BroadcastReceiver,代码如下:
- package net.blogjava.mobile.startupservice;
- import android.content.BroadcastReceiver;
- import android.content.Context;
- import android.content.Intent;
- public class StartupReceiver extends BroadcastReceiver
- {
- @Override
- public void onReceive(Context context, Intent intent)
- {
- // 启动一个Service
- Intent serviceIntent = new Intent(context, MyService.class);
- context.startService(serviceIntent);
- Intent activityIntent = new Intent(context, MessageActivity.class);
- // 要想在Service中启动Activity,必须设置如下标志
- activityIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
- context.startActivity(activityIntent);
- }
- }
在StartupReceiver类的onReceive方法中完成了两项工作:启动服务和显示一个Activity来提示服务启动成功。其中 MessageActivity是一个普通的Activity类,只是该类在配置时使用了"@android:style/Theme.Dialog"主 题,因此,如果服务启动成功,会显示如图8.4所示的信息。
|
| 图8.4 在BroadcastReceiver中启动服务 |
如果安装本例后,在重新启动模拟器后并未出现如图8.4所示的信息提示框,最大的可能是没有在AndroidManifest.xml文件中配置BroadcastReceiver和Service,下面来看一下AndroidManifest.xml文件的完整代码。
- <?xml version="1.0" encoding="utf-8"?>
- <manifest xmlns:android="http://schemas.android.com/apk/res/android"
- package="net.blogjava.mobile.startupservice"
android:versionCode="1" - android:versionName="1.0">
- <application android:icon="@drawable/icon"
android:label="@string/app_name"> - <activity android:name=".MessageActivity"
android:theme="@android:style/Theme.Dialog"> - <intent-filter>
- <category android:name="android.
intent.category.LAUNCHER" /> - </intent-filter>
- </activity>
- <receiver android:name="StartupReceiver">
- <intent-filter>
- <action android:name="android.
intent.action.BOOT_COMPLETED" /> - <category android:name="android.
intent.category.LAUNCHER" /> - </intent-filter>
- </receiver>
- <service android:enabled="true" android:name=".MyService" />
- </application>
- <uses-sdk android:minSdkVersion="3" />
- <uses-permission android:name="android.
permission.RECEIVE_BOOT_COMPLETED" /> - </manifest>
现在运行本例,然后重启一下模拟器,看看LogCat视图中是否输出了相应的日志信息。
8.1.3 在BroadcastReceiver中启动Service的更多相关文章
- Android动态部署五:怎样从插件apk中启动Service
转载请注明出处:http://blog.csdn.net/ximsfei/article/details/51072332 github地址:https://github.com/ximsfei/Dy ...
- BroadcastReceiver中调用Service
首先是代码: package com.larry.msglighter; import android.content.BroadcastReceiver; import android.conten ...
- Activity 怎么和 Service 绑定,怎么在 Activity 中启动自己对应的 Service?
Activity 通过 bindService(Intent service, ServiceConnection conn, int flags)跟 Service 进行绑定,当绑定成功的时候 Se ...
- centOS7中启动MySQL数据库提示: Failed to start mysqld.service: Unit not foundc
现象: 在centOS7中启动MySQL数据库提示: Failed to start mysqld.service: Unit not found [明明已经安装了,为什么提示不存在呢?] 原因: 在 ...
- Android中Service通信(一)——启动Service并传递数据
启动Service并传递数据的小实例(通过外界与服务进行通信): 1.activity_main.xml: <EditText android:layout_width="match_ ...
- Android 中的 Service 全面总结
1.Service的种类 按运行地点分类: 类别 区别 优点 缺点 应用 本地服务(Local) 该服务依附在主进程上, 服务依附在主进程上而不是独立的进程,这样在一定程度上节约了资源,另 ...
- Android 中的 Service 全面总结(转载)
转载地址:http://www.cnblogs.com/newcj/archive/2011/05/30/2061370.html 感谢作者 Android 中的 Service 全面总结 1.Ser ...
- Android 中的 Service 全面总结 (转)
原文地址:http://www.cnblogs.com/newcj/archive/2011/05/30/2061370.html 1.Service的种类 按运行地点分类: 类别 区别 优点 ...
- 【转】Android 中的 Service 全面总结
1.Service的种类 按运行地点分类: 类别 区别 优点 缺点 应用 本地服务(Local) 该服务依附在主进程上, 服务依附在主进程上而不是独立的进程,这样在一定程度上节约了资源,另 ...
随机推荐
- HDU 1556.Color the ball-差分数组-备忘
备忘. 差分数组: 区间更新查询有很多方法,线段树.树状数组等都可以.如果为离线查询,就可以考虑使用差分数组. 假设对于区间[l,r]的每个数都加1,我们用一个数组a来记录,a[l]+=1;a[r+1 ...
- (6)python 循环控制
一.if语句 1.条件执行和if语句 2.else子句 3.elif子句 多个检查条件时 4.嵌套代码 5.空语句 使用pass占位 6.断言 关键字 assert 判断表达式前加上这个关键字表示, ...
- 洛谷——P1017 进制转换
P1017 进制转换 题目描述 我们可以用这样的方式来表示一个十进制数: 将每个阿拉伯数字乘以一个以该数字所处位置的(值减1)为指数,以10为底数的幂之和的形式.例如:123可表示为 1\times ...
- 数字 function
SELECT TRUNC(15.79), TRUNC(), ROUND(15.79), ), ), FLOOR(26.983), CEIL(26.123), ), ), ), MOD(,) FROM ...
- 某考试 T2 orzcyr
非常nice的一道行列式的题目. 考虑如果没有路径不相交这个限制的话,那么这个题就是一个行列式:设 a[i][j] 为从编号第i小的源点到编号第j小的汇点的路径条数,那么矩阵a[][]的行列式就是的答 ...
- bzoj 2660: [Beijing wc2012]最多的方案
Time Limit: 5 Sec Memory Limit: 128 MB Submit: 617 Solved: 361[Submit][Status][ ...
- 【MySQL笔记】MySql5安装图解教程
MySql5.6Window超详细安装教程 2015-06-23 0个评论 来源:林炳文Evankaka的专栏 收藏 我要投稿 一.安装包准备 1.下载MySql5.6 ht ...
- NSPredicate 谓词总结 数组过滤 模糊匹配
NSPredicate 用于指定过滤条件,主要用于从集合中分拣出符合条件的对象,也可以用于字符串的正则匹配. NSPredicate常用方法介绍 1.创建NSPredicate(相当于创建一个过滤条件 ...
- 【ArcGIS 10.2新特性】ArcGIS 10.2将PostgreSQL原生数据发布为要素服务
1.ArcGIS 10.2支持原生数据发布为要素服 有没有将自己已有的空间数据发布为要素服务的需求?有没有将非Esri空间数据类型的数据作为服务在Web端展示的需求? ArcGIS 10.2 ...
- "__doPostBack”未定义的解决办法(转载)
"__doPostBack”未定义,在IE下调试错误: 问题是服务器版的.Net40的补丁没有打上,ASP.NET 可能无法辨识出一些浏览器的最新版本,还会经常把它们看做是低级的浏览器,不支 ...
