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; } } }; }