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()方法中.这样在离开的时候 就不再接收广播了.

原文地址:https://www.cnblogs.com/easyfrog/p/2973275.html