broadcast Service

说明:
android手机存在各种各样的广播信息,
比如:手机刚启动时候的提示信息,电池电量警告提示信息,来电信息以及短信接收等许多方面的应用。


1.开发者自定义广播的要求:
1.所有广播都是以一个类的形式存在的;
2.广播的类必须是继承自BroadcastReceiver 类;
3.不需再AndroidMainfest.xml 中向Android 系统注册;


2.下面看看广播组件的结构:
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
public class MyBroadcast extends BroadcastReceiver  {
@Override
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
//此处编写代码
}
}


3.广播的触发方式:
a.通过Activity程序的sendBroadcast()方法触发所有广播组件,再启动前必须判断用户传递的广播
是否是指定的Action类型,若是则进行广播。

I.Activity程序的sendBroadcast()方法的启动  (动态注册)
Intent intent = new Intent(Intent.ACTION_EDIT);   // 启动Action
sendBroadcast(intent);    //进行广播

II.广播类中对广播的处理
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
public class MyBroadcast extends BroadcastReceiver  {  // 继承自BroadcastReceiver 类
@Override
public MyBroadcast() {  // 构造方法
System.out.println("每次广播都会实例化一个广播组件");
}
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
//此处编写代码
Toast.makeText(context,"广播已经启动",Toast.LENGTH_LONG).show();  //显示信息
}
}

III.AndroidMainfest.xml 中注册广播组件   (静态注册)
android:name="MyBroadcast"    //广播处理类
android:enabled="true">         //启用广播
         //匹配Action操作,之后进行广播 (广播的过滤配置信息)
 



b.在Activity中自定义一个Action并传送数据到广播组件中去。
public Intent regiisterReceiver(BroadcastReceiver receiver,IntentFilter filter)  //注册广播,并指定IntentFilter
public void unregiisterReceiver(BroadcastReceiver receiver)  //注销指定的广播

配置AndroidMainfest.xml   (静态注册)
android:enabled="true">
  // 指定IntentFilter
  // 包名路径+自定义(大写)



代码配置IntentFilter方法
public IntentFilter()                                //创建一个空的IntentFilter对象
public IntentFilter(String action)                   //创建一个IntentFilter对象,并指定Action
public final void addAction(String action)           //增加一个要过滤的Action
public final void addCategory(String category)       //增加一个要过滤的Category
public final boolean hasAction(String action)        //判断指定的Action是否存在
public final boolean hasCategory(String category)    //判断指定的Category是否存在

实例如下:
private BroadcastReceiver MyBroadcast = null ;// 广播接收者
Intent it = new Intent("org.lxh.action.GAJAH") ;// 指定Action
it.putExtra("msg", "传送附加信息到广播组件中");           // 附加数据
IntentFilter filter = new IntentFilter("org.lxh.action.GAJAH"); //创建一个IntentFilter对象,并指定Action
MyBroadcast = new ReceiveBroadcast() ;
registerReceiver(MyBroadcast, filter); // 注册广播 (动态注册)
sendBroadcast(it); // 进行广播

@Override
protected void onStop() {
super.unregisterReceiver(MyBroadcast) ; // 注销广播 
super.onStop();
}


import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.widget.Toast;
public class MyBroadcast extends BroadcastReceiver { // 继承BroadcastReceiver
@Override
public void onReceive(Context context, Intent intent) { // 处理广播事件
if ("org.lxh.action.GAJAH".equals(intent.getAction())) { // 判断是指定的Action
String msg = intent.getStringExtra("msg") ;       // 取得附加信息
Toast.makeText(context, msg, Toast.LENGTH_LONG).show(); // 显示信息
}
}
}


c.通过BroadCast启动Service 
说明:
Service也可以通过BroadCast启动,如果一个Service要通过Broadcast启动并没有任何特殊的操作,
只需要在Broadcast中调用startService()方法即可完成。

新建一个Service 服务:
public class MyServiceUtil extends Service { // 继承Service
@Override
public IBinder onBind(Intent intent) { // 绑定时触发
return null;
}
@Override
public void onCreate() { // 创建时触发
System.out.println("*** Service onCreate()");
super.onCreate();
}
@Override
public void onDestroy() { // 销毁时触发
System.out.println("*** Service onDestroy()");
super.onDestroy();
}
@Override
public int onStartCommand(Intent intent, 
int flags, int startId) { // 启动时触发
System.out.println("*** Service onStartCommand() Intent = " + intent);
return Service.START_CONTINUATION_MASK;
}
}


广播启动Service服务:
package org.lxh.demo;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
public class MyBroadcastReceiverUtil extends BroadcastReceiver {    // 继承BroadcastReceiver
@Override
public void onReceive(Context context, Intent intent) {
context.startService(new Intent(context, MyServiceUtil.class));  // 启动Service
}
}









你可能感兴趣的:(android,应用开发)