Broadcast Receiver是指广播接收器,它和事件处理机制类似,只不过事件处理机制是程序组件级别的,而广播事件处理机制则是系统级别的。
事件的广播比较简单,同样还是创建一个Intent,通过设置action属性,再sendBroadcast()将广播发出;
事件的接受是定义一个类继承自BroadcastReceiver,覆盖onReceiver()方法,在该方法中响应事件。
1、自己定义BroadcastReceiver来处理广播事件
public class MainActivity extends Activity {
private Button b1;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.broadcast_demo);
b1 = (Button)findViewById(R.id.sendBroadCast);
b1.setOnClickListener(listener);
}
private OnClickListener listener = new OnClickListener() {
@Override
public void onClick(View view) {
switch (view.getId()) {
case R.id.sendBroadCast:
Intent intent = new Intent("forBroadcast");
intent.putExtra("name", "this is broadcast test!");
sendBroadcast(intent);//发送广播
break;
default:
break;
}
}
};
}
public class MyReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Log.i("receiver",intent.getStringExtra("name"));
}
}
在Manifest中注册广播接收器
<receiver android:name="com.zj.broadcast.MyReceiver">
<intent-filter>
<action android:name="forBroadcast"></action>
</intent-filter>
</receiver>
也可以使用代码的方式来注册一个广播接收器
一般我们是在Activity.onResume()中方法中使用Context.registReceiver()注册一个广播接收器,在onPause()中使用unRegisterReceiver()来销毁一个广播接收器。
2、系统广播事件的使用
除了上面我们自定义的广播事件,Android系统还提供了很多标准的广播Action。这些广播是系统自动发出的,我们直接定义事件接受器进行接受就可以使用这些系统消息了。
public class SystemBootReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context arg0, Intent arg1) {
Log.i("service", "系统启动成功!");
}
}
<!-- 注册系统启动完成的广播接收器 -->
<receiver android:name="com.zj.broadcast.SystemBootReceiver">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED"></action>
</intent-filter>
</receiver>
3、Notification与NotificationManager的使用
public class MainActivity extends Activity {
private Button b1,b2;
private Notification mNotification;
private NotificationManager mNotificationManager;
private static final int ID = 100;//通知的ID
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.notification_demo);
b1 = (Button)findViewById(R.id.sendBtn);
b2 = (Button)findViewById(R.id.cancleBtn);
b1.setOnClickListener(listener);
b2.setOnClickListener(listener);
//获取系统通知管理器实例
mNotificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
//实例化自己的通知实例
mNotification = new Notification();
//显示图标
mNotification.icon = R.drawable.icon;
//显示事件
mNotification.when = System.currentTimeMillis();
//显示提示信息,该信息也会在状态栏中滚动显示
mNotification.tickerText = "您有一条通知...";
}
private OnClickListener listener = new OnClickListener() {
@Override
public void onClick(View view) {
switch (view.getId()) {
case R.id.sendBtn:
//设置通知的点击事件(此处为跳转到ResultActivity)
Intent intent = new Intent();
intent.setClass(MainActivity.this, ResultActivity.class);
//使用PendingIntent包装Intent
PendingIntent pi = PendingIntent.getActivity(MainActivity.this, 0, intent, 0);
//设置事件
mNotification.setLatestEventInfo(MainActivity.this, "通知标题...", "通知内容...", pi);
//发送通知
mNotificationManager.notify(ID, mNotification);
break;
case R.id.cancleBtn:
//取消某ID的通知
mNotificationManager.cancel(ID);
break;
default:
break;
}
}
};
}