8.1.3 在BroadcastReceiver中启动Service
2014-08-21 18:08
281 查看
2010-06-21 16:57 李宁 中国水利水电出版社 字号:T | T
《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所示的信息提示框,最大的可能是没有在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视图中是否输出了相应的日志信息。
《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中启动服务 |
<?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视图中是否输出了相应的日志信息。
相关文章推荐
- 在service和BroadCastReceiver中 启动activity和alertdialog
- 从BroadcastReceiver或者Service当中启动Activity
- 通过BroadcastReceiver和 service 实现开机自动启动
- android用服务service与广播broadcastreceiver创建开机启动服务
- Android 如何在service和BroadCastReceiver中 启动activity和alertdialog?
- BroadcastReceiver+Service .开机启动服务
- Android中启动一个Service和广播接受者BroadcastReceiver,用于随时观察网络情况
- activity BroadcastReceiver Service 三大组件的启动或触发
- Android Service BroadcastReceiver 合用 应用全局随便启动activity
- Android——开机启动功能(Service和BroadcastReceiver)
- Android的Service与BroadcastReceiver之一 Service简介、创建、配置、启动、停止与其生命周期
- Intent启动系统组件(activity,service,BroadReceiver)-android学习之旅(四十九)
- 在BroadcastReceiver中启动Activity的问题
- Service、Alarm与BroadcastReceiver的使用方法
- 使用Service和BroadcastReceiver实时监听网络状态
- Service与BroadcastReceiver
- Activity,Service,和BroadCastReceiver的ANR,无响应时长是多少?
- Android的Service与BroadcastReceiver之二 跨进程调用Service(AIDL Service)
- 安卓开发的Service、BroadcastReceiver和Webview
- 44.使用Service、BroadcastReceiver、CountDownTimer完成页面销毁不重新计时的验证码计时器