10天学通Android开发(3-1)-组件广播接收器Broadcast Receive
广播接收器,它和事件处理机制类似,只不过事件的处理机制是程序组件级别的,而广播处理机制是系统级别的。
BroadcastReceiver如操作系统启动完毕,发出广播信号;低电量提示广播,应用中耗电量大的部分功能关闭;侦听短信;
用于接收并处理广播通知(broadcastannouncements)。多数的广播是系统发起的,如地域变换、电量不足、来电来信等。程序也可以播放一个广播。程序可以有任意数量的 broadcast receivers来响应它觉得重要的通知。broadcast receiver可以通过多种方式通知用户:启动activity、使用NotificationManager、开启背景灯、振动设备、播放声音等,最典型的是在状态栏显示一个图标,这样用户就可以点它打开看通知内容。
通常我们的某个应用或系统本身在某些事件(电池电量不足、来电来短信)来临时会广播一个Intent出去,我们可以利用注册一个Broadcast Receiver来监听到这些Intent并获取Intent中的数据。
使用场合:通信过程传递过来的数据量不大,频度也不高
主要功能
事件的广播比价简单,构建Intent对象,调用sendBroadcast()方法将广播发出
直接定义事件接收器进行接收,重写onReceiver
注册\注销Receiver ,registerReceiver(r,filter), unregisterReceiver(r);
案例:
创建新工程
新建一个广播接收器,类: MyBroadcast扩展自BroadcastReceiver,一旦收到消息,会执行抽象方法onReceive,如下:
publicvoid onReceive(Context arg0, Intent arg1) {
// TODO Auto-generatedmethod stub
System.out.println("我收到了你的信息:"+arg1.getStringExtra("MyTxt"));
}
3) AndroidManifest.xml,注册广播接收器,类: MyBroadcast。
4)MainActivity加进一按钮,发送消息
<Button
android:id="@+id/butSendBroad"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/textView1"
android:layout_below="@+id/textView1"
android:layout_marginTop="29dp"
android:text="SendBroad" />
5)实现发送
butSendBroad.setOnClickListener(new View.OnClickListener() {
@Override
publicvoid onClick(View v) {
Intent i=newIntent(MainActivity.this,MyBroadcast.class);
i.putExtra("MyTxt", "HelloBroad");
sendBroadcast(i);
}
}
);
6)可先运行,logcat可看到消息
7)动态的注册和注销广播接受器, AndroidManifest中去除广播接收器类的注册
<!-- <receiverandroid:name="MyBroadcast"></receiver>-->
8)MainActivity中,添加注册和注销两按钮
<Button
android:id="@+id/btnReg"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/butSendBroad"
android:layout_below="@+id/butSendBroad"
android:layout_marginTop="45dp"
android:text="Regist"/>
<Button
android:id="@+id/btnUnReg"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/btnReg"
android:layout_centerVertical="true"
android:text="Unreg" />
9) MyBroadcast指定一地址变量:
public static final String ACTION="10-1.intenet.action.mybroad";
10) 定义MyBroadcast实例
private final MyBroadcast MyBRecive=newMyBroadcast();
11)实现注册
btnReg.setOnClickListener(newView.OnClickListener() {
@Override
publicvoid onClick(View v) {
// TODO Auto-generatedmethod stub
registerReceiver(MyBRecive,new IntentFilter(MyBroadcast.ACTION));
}
});
12)取消注册
btnUnReg.setOnClickListener(new View.OnClickListener() {
@Override
publicvoid onClick(View v) {
// TODO Auto-generatedmethod stub
unregisterReceiver(MyBRecive);
}
});
13)发送广播更改:
butSendBroad.setOnClickListener(new View.OnClickListener() {
@Override
publicvoid onClick(View v) {
//Intent i=newIntent(MainActivity.this,MyBroadcast.class);
Intent i=newIntent(MyBroadcast.ACTION);
i.putExtra("MyTxt", "HelloBroad");
sendBroadcast(i);
}
}
);
参考:
http://www.cnblogs.com/linzheng/archive/2011/01/22/1942053.html
源码下载:
http://down.51cto.com/data/1964492
本文出自 “蓝海战术” 博客,请务必保留此出处http://wanxl.blog.51cto.com/2129901/1592513
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。