说明:
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
}
}