Android 开发笔记三 BroadcastReceiver 广播接收者
发送端:
发送的广播 里面在的内容也是一个 Intent对象
可以 Activity ,Service 中发送广播 使用 sendBroadcast(intent) 方法.
这里的 intent 需要设置一下 它的 Action标签,用来标识这个Intent. 只有接收者也是同样的标识时. 才会接收到这个Intent
比如: intent.setAction("ztc.broadcast.action");
你也可以在Intent里.添加一些信息 intent.putExtra("msg",myMessage);
接收端:
需要先创建一个 继承自 BroadcastReceiver 的类并Override它的 OnReceive方法
1 // 这个类就是我们的 广播接收者,它在这里的任务很简单只是用收到的字符串改成一个 TextView里面的内容而已 2 // 它接收的是一个Intent的对象. Android里的数据传递一般都使用这个,不过在Notification中使用的是 PendingIntent类, 3 // 其是也是一个Intent类封装, 表示这个意图是在之后的某个事件时才会发生,一般就是点击了Notification列表.来出发一些操作. 4 class MyBroadcastReceiver extends BroadcastReceiver { 5 @SuppressLint("NewApi") 6 @Override 7 public void onReceive(Context context, Intent intent) { 8 // TODO Auto-generated method stub 9 10 String rec = intent.getStringExtra("msg"); 11 12 Builder notiBuilder = new Notification.Builder(MainActivity.this); 13 notiBuilder.setContentTitle("收到的值 : "); 14 notiBuilder.setContentText("这里是主要内容 " + rec); 15 // 必须设置这个 Icon 要不然 会被忽略掉的. 16 notiBuilder.setSmallIcon(R.drawable.ic_launcher); 17 noti = notiBuilder.build(); 18 // 发送消息 19 notiManager.notify(1, noti); 20 21 info.setText(rec); 22 } 23 }
有了这个 Broadcast接收者类, 我们就需要在系统中将这个接收广播的接收者注册上, 这样系统才能将广播发给你, 但是系统中的广播很多. 你还需要设置一个IntentFilter 来告诉系统. "我只接收哪种广播"
1 // 创建一个 IntentFilter对象,来限制我们接收的Intent的Action的类型 2 intentFilter = new IntentFilter("ztc.broadcast.action");
有这 广播接收者类 及 广播过滤机 后我们就可以 注册了
注册 : registerReceiver(myBroadcastReceiver,intentFilter);
注销 : unregisterReceiver(myBroadcastReceiver);
技巧:
如果我们接收到的广播需要更新 Activity中的UI的话. 那么 最好把 注册广播放到 Activity的 OnResume() 方法中,这样在离开回来后. 可以重新接收广播, 而装 注销广播 放到 Activity中的 OnPause()方法中.这样在离开的时候 就不再接收广播了.