8.1.3 在BroadcastReceiver中启动Service

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,代码如下:

  1. package net.blogjava.mobile.startupservice;
  2. import android.content.BroadcastReceiver;
  3. import android.content.Context;
  4. import android.content.Intent;
  5. public class StartupReceiver extends BroadcastReceiver
  6. {
  7. @Override
  8. public void onReceive(Context context, Intent intent)
  9. {
  10. //  启动一个Service
  11. Intent serviceIntent = new Intent(context, MyService.class);
  12. context.startService(serviceIntent);
  13. Intent activityIntent = new Intent(context, MessageActivity.class);
  14. //  要想在Service中启动Activity,必须设置如下标志
  15. activityIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
  16. context.startActivity(activityIntent);
  17. }
  18. }

在StartupReceiver类的onReceive方法中完成了两项工作:启动服务和显示一个Activity来提示服务启动成功。其中 MessageActivity是一个普通的Activity类,只是该类在配置时使用了"@android:style/Theme.Dialog"主 题,因此,如果服务启动成功,会显示如图8.4所示的信息。

 
图8.4  在BroadcastReceiver中启动服务

如果安装本例后,在重新启动模拟器后并未出现如图8.4所示的信息提示框,最大的可能是没有在AndroidManifest.xml文件中配置BroadcastReceiver和Service,下面来看一下AndroidManifest.xml文件的完整代码。

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <manifest xmlns:android="http://schemas.android.com/apk/res/android"
  3. package="net.blogjava.mobile.startupservice"
     android:versionCode="1"
  4. android:versionName="1.0">
  5. <application android:icon="@drawable/icon" 
    android:label="@string/app_name">
  6. <activity android:name=".MessageActivity" 
    android:theme="@android:style/Theme.Dialog">
  7. <intent-filter>
  8. <category android:name="android.
    intent.category.LAUNCHER" />
  9. </intent-filter>
  10. </activity>
  11. <receiver android:name="StartupReceiver">
  12. <intent-filter>
  13. <action android:name="android.
    intent.action.BOOT_COMPLETED" />
  14. <category android:name="android.
    intent.category.LAUNCHER" />
  15. </intent-filter>
  16. </receiver>
  17. <service android:enabled="true" android:name=".MyService" />
  18. </application>
  19. <uses-sdk android:minSdkVersion="3" />
  20. <uses-permission android:name="android.
    permission.RECEIVE_BOOT_COMPLETED" />
  21. </manifest>

现在运行本例,然后重启一下模拟器,看看LogCat视图中是否输出了相应的日志信息。

8.1.3 在BroadcastReceiver中启动Service

时间: 2024-08-17 05:18:04

8.1.3 在BroadcastReceiver中启动Service的相关文章

在BroadcastReceiver中启动Activity的问题

/** * Demo描述: * 在BroadcastReceiver中启动Activity的问题 * * 如果在BroadcastReceiver的onReceive()方法中如下启动一个Activity * Intent intent=new Intent(context,AnotherActivity.class); * context.startActivity(intent); * 可捕获异常信息: * android.util.AndroidRuntimeException: * Ca

Android动态部署五:如何从插件apk中启动Service

转载请注明出处:http://blog.csdn.net/ximsfei/article/details/51072332 github地址:https://github.com/ximsfei/DynamicDeploymentApk Android动态部署一:Google原生Split APK浅析 Android动态部署二:APK安装及AndroidManifest.xml解析流程分析 Android动态部署三:如何从插件apk中启动Activity(一) Android动态部署四:如何从插

Android动态部署五:怎样从插件apk中启动Service

转载请注明出处:http://blog.csdn.net/ximsfei/article/details/51072332 github地址:https://github.com/ximsfei/DynamicDeploymentApk Android动态部署一:Google原生Split APK浅析 Android动态部署二:APK安装及AndroidManifest.xml解析流程分析 Android动态部署三:怎样从插件apk中启动Activity(一) Android动态部署四:怎样从插

docker容器中启动service服务 Failed to get D-Bus connection: Operation not permitted

解决方案: 启动时设置参数  --privileged 使用该参数,container内的root拥有真正的root权限.否则,container内的root只是外部的一个普通用户权限

在Activity中判断Service是否已经运行

正在研究Android,写了一个Demo,需要在一个Activity中启动service,感觉应该在启动前判断一下是否服务已经跑起来了,百度到如下代码,留待备份. <pre name="code" class="java">//本方法判断自己些的一个Service-->com.android.controlAddFunctions.PhoneService是否已经运行 public static boolean isWorked() { Activ

Android应用程序在新的进程中启动新的Activity的方法和过程分析

Android应用程序在新的进程中启动新的Activity的方法和过程分析 - 老罗的Android之旅 - 博客频道 - CSDN.NET ? ? ? ?前面我们在分析Activity启动过程的时候,看到同一个应用程序的Activity一般都是在同一个进程中启动,事实上,Activity也可以像Service一样在新的进程中启动,这样,一个应用程序就可以跨越好几个进程了,本文就分析一下在新的进程中启动Activity的方法和过程. ?? ? ? ?在前面Android进程间通信(IPC)机制B

summit SMT中dispatch service无法启动的问题

[问题描述] 在环境维护的过程中,发现SMT中dispatch service启动后就停止的情况,查看日志,发现errorlog为空 [解决方法] 删除client tree下etc/stpcfg目录中的dispatch service相关的配置文件,这样的话dispatch service启动的时候就会去找summit核心的配置文件, 这样如果服务可以正常启动的话,说明是dispatch service客制化导致的错误,要从客制化过的配置文件开始排查错误.

Android中Service通信(一)——启动Service并传递数据

启动Service并传递数据的小实例(通过外界与服务进行通信): 1.activity_main.xml: <EditText android:layout_width="match_parent" android:layout_height="wrap_content" android:text="默认信息" android:id="@+id/etData"/> <Button android:text=&

关于在Android5.0中 无法启动Service问题

<service android:name=".MyPushOrderService" android:label="@string/app_name" android:enabled="true" > <intent-filter> <!-- 接收到通知后处理的Service --> <action android:name="com.lanshui.mobile.MYGETPUSH_ORDE