1.首先,Activity的onCreate方法中要有启动后台Service的Intent
Intent intent = new Intent(this, xxxService.class); startService(intent);
为了能在AndroidManifest.xml中注册Activity中的receiver(它是内部类形式),需要把其定义成static的
public static class MyServiceReceiver extends BroadcastReceiver { ...}
注意,当把receiver定义成static时,就不能使用non-static的sendBroadcast(intent) 方法了,如果要在receiver中发送广播消息,只能在onCreate中通过代码的方式注册receiver
2.在清单文件中注册Activity以及其内部receiver
<activity android:name=".activity.xxxActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <receiver android:name=".activity.xxxActivity$MyServiceReceiver"> <intent-filter> <action android:name="com.example.action.UPDATE_BROADCAST" /> </intent-filter> </receiver>
其中,使用xxxActivity$MyServiceReceiver即可注册被定义成内部类的receiver. 此receiver用于接收后台service的广播信息,并通知前台Activity对界面进行改变等操作(一般来说前台Activity会实现onClickListener接口,会在button的单击事件中就广播消息给后台Service)。
3.在后台Serivce中定义一个内部类型的receiver,因为要在此receiver中使用Non-static的sendBroadcast方法,所以不能定义为static了,所以就只好在此service的onCreate方法里注册该receiver了
public class MyActivityReceiver extends BroadcastReceiver {.....}
4.在sevice的onCreate方法中注册该receiver
receiver = new MyActivityReceiver(); IntentFilter filter = new IntentFilter(); filter.addAction("com.example.action.CTL_BROADCAST"); registerReceiver(receiver, filter);
其中filter.addAction("com.example.action.CTL_BROADCAST");指定该后台SERVICE所能监听到的action为
com.example.action.CTL_BROADCAST的intent.
以及,在清单文件中注册该Service:
<service android:name=".service.MusicService" />
5.注意,一旦Activity和Service一通信,他们内部类BroadcastReceiver的onReceive方法里面的intent参数即为它本身能够监听到的intent
如Activity中内部类的onReceive方法中的intent, 即为action为com.example.action.UPDATE_BROADCAST的Intent,
<action android:name="com.example.action.UPDATE_BROADCAST" />指定前台Activity所能监听的Action,表明后台如果想要给前台广播信息,必须发送一个action为com.example.action.UPDATE_BROADCAST的Intent:
Intent intent = new Intent("com.example.action.UPDATE_BROADCAST"); intent.putExtras(String key, Object value); sendBroadcast(intent);
同理,后台Service也一样。
相关推荐
Android:Intent页面跳转,Activity生命周期,Service服务,广播代码实例
对应于博客中的例子: 有:定时任务,发送短信,状态栏通知,行车模式,夜间模式,唤醒锁,音量设置, 开机自启设置,拍照设置,等
android服务自启动Service以及BroadcastReceiver和Notification.zip
android 5大组件的应用案例 Activity Intent Service Broadcastreceiver ContentProvider android 5大组件的应用案例 Activity Intent Service Broadcastreceiver ContentProvider android 5大组件的应用案例 ...
利用广播Broadcast Receiver,在2个不同的Activity传递数据
android service Notification BroadcastReceiver Intent 安装的服务开机自启动,service定时的打印消息,消息同时显示在通知栏,窗体界面的跳转,自定义控件的开发。系统广播,定时广播,轮询广播等。...
第一种注册的方法可以保证在应用程序安装之后,BroadcastReceiver始终处于活动状态,通常用于监听系统状态的改变,比如说手机的电量,wifi网卡的状态(当然,监视这些东西也是取决于软件的需求)。对于这样的...
BroadcastReceiverDemo IntentDemo IntentResolutionDemo
BroadCastReceiver
Android Service与BroadcastReceiver、bindService示例详解,代码非常详细,详解博客网址:http://blog.csdn.net/sunboy_2050/article/details/7364024
BroadcastReceiver——Android四大组件只一——广播
先启动service 然后最后一个按钮
BroadcastReceiver(广播接收器),在Android开发中,BroadcastReceiver的应用场景非常多,属于Android四大组件之一。 Android 广播分为两个角色:广播发送者、广播接收者 一、 作用 用于监听 / 接收 应用发出的广播...
Android组件间通信库,代替Intent和BroadcastReceiver,简单易用,源码以及jar提供下载
安卓四大组件——BroadcastReceiver(广播)
android 静态注册和动态注册的使用,普通广播的发送demo
11.四大组件之BroadcastReceiver.pptx
本章内容服务(Service)是Android系统中4个应用程序组件之一(其他的组件详见3.2节的内容)。服务主要用于两个目的:后台运行和跨进程访问。通过启动一个服务,可以在不显示界面的前提下在后台运行指定的任务,这样...
BroadcastReceiver通过接口回调更新界面,BroadcastReceiver不写在Activity里面,便于代码的封装,更加便于阅读
Android四大核心组件 Activity、BroadcastReceiver、Service、ContentProvider