程序源码http://download.csdn.net/detail/taoolee/9090315
BroadcastReceiver介绍
BroadcastReceiver用于接收程序(包括用户开发的程序和系统内部的程序)所发出的Broadcast Intent
用法
程序启动BroadcastReceiver只需要两步
1 创建需要启动的BroadcastReceiver的Intent
2 调用Context的sendBroadcast()或sendOrderedBroadcast()方法来启动指定的BroadcastReceiver
private void sendBroadcast() {
Intent intent = new Intent();
//设置频道com.receiver.test
intent.setAction("com.receiver.test");
intent.putExtra("msg", "简单的消息");
sendBroadcast(intent);
}
程序接收Broadcast使用BroadcastReceiver
BroadcastReceiver本质上是一个系统级的监听器,拥有自己的进程,只要有与之匹配的Intent就要被广播出来。只要重写BroadcastReceiver的onReceive()方法就可以,并同时指定能匹配的Intent 有两种方法指定匹配的intent;
注意:每次系统Broadcast事件发生后,系统执行完onReceive()方法后,BroadcastReceiver实例就要被销毁,所以要 @Override protected void onDestroy() 方法 (1)AndroidManifest.xml文件中
<receiver android:name=".MyReceiver">
<intent-filter>
<action android:name="com.receiver.test" />
</intent-filter>
</receiver>
(2)java代码中
private MyReceiver myReceiver;
//代码中设置频道,最后要解除绑定
myReceiver=new MyReceiver();
IntentFilter filter=new IntentFilter("com.receiver.test");
registerReceiver(myReceiver,filter);
@Override
protected void onDestroy() {
super.onDestroy();
//解除绑定
unregisterReceiver(myReceiver);
}
当应用程序发出一个Broadcast Intent之后,所有匹配改Intent的BroadcastReceiver都有可能被启动,下面程序用于接收广播,收到后使用Toast提示信息
public class MyReceiver extends BroadcastReceiver {
//用于接收广播收到后使用Toast提示
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(context,"收到消息",Toast.LENGTH_LONG).show();
}
}
效果演示如下
下面利用BroadcastReceiver实现闹钟功能
private AlarmManager mAlarmManager;
mAlarmManager= (AlarmManager) getSystemService(Context.ALARM_SERVICE);
private void startAlarm() {
Intent intent2 = new Intent();
//设置频道
intent2.setAction("com.receiver.test");
//0x23为随便设置的标志
PendingIntent pendingIntent=PendingIntent.getBroadcast(getApplicationContext(),0x23,intent2,PendingIntent.FLAG_UPDATE_CURRENT);
mAlarmManager.setRepeating(AlarmManager.RTC_WAKEUP,System.currentTimeMillis()+5000,3000,pendingIntent);
}
private void cancelAlarm() {
Intent intent2 = new Intent();
//设置频道
intent2.setAction("com.receiver.test");
PendingIntent pendingIntent=PendingIntent.getBroadcast(getApplicationContext(),0x23,intent2,PendingIntent.FLAG_UPDATE_CURRENT);
//五秒后启动闹钟, 三秒后再次启动闹钟
mAlarmManager.setRepeating(AlarmManager.RTC_WAKEUP,System.currentTimeMillis()+5000,3000,pendingIntent);
mAlarmManager.cancel(pendingIntent);
}
效果如下
使用系统广播
下面两个一个监听网络状态另一个当程序被卸载时广播
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"/>
<uses-permission android:name="android.permission.broadcast_package_removed"/>
<receiver android:name=".MyReceiver">
<intent-filter>
<action android:name="android.net.conn.CONNECTIVITY_CHANGE"></action>
<action android:name="android.intent.action.PACKAGE_REMOVED"></action>
</intent-filter>
</receiver>