1
1
## 一、 定义
2
2
3
3
- ` BroadcastReceiver ` (广播接收器),属于Android四大组件之一
4
- - 在Android开发中,BroadcastReceiver的应用场景非常多
5
-
6
- 广播,是一个全局的监听器,属于` Android ` 四大组件之一
4
+ - 在Android开发中,BroadcastReceiver的应用场景非常多广播,是一个全局的监听器,属于` Android ` 四大组件之一
7
5
8
6
> ` Android ` 广播分为两个角色:广播发送者、广播接收者
9
7
@@ -79,7 +77,7 @@ public class mBroadcastReceiver extends BroadcastReceiver {
79
77
// 接收到广播后自动调用该方法
80
78
@Override
81
79
public void onReceive (Context context , Intent intent ) {
82
- // 写入接收广播后的操作
80
+ // 写入接收广播后的操作
83
81
}
84
82
}
85
83
```
@@ -90,38 +88,38 @@ public class mBroadcastReceiver extends BroadcastReceiver {
90
88
91
89
#### 4.2.1 静态注册
92
90
93
- - 在AndroidManifest.xml里通过** <receive >** 标签声明
91
+ - 在AndroidManifest.xml里通过 ** <receive\ >** 标签声明
94
92
- 属性说明:
95
93
96
94
``` xml
97
- <receiver
98
- android : enabled =[" true" | " false" ]
99
- //此broadcastReceiver能否接收其他App的发出的广播
100
- //默认值是由receiver中有无intent-filter决定的:如果有intent-filter,默认值为true,否则为false
101
- android : exported =[" true" | " false" ]
102
- android : icon =" drawable resource"
103
- android : label =" string resource"
104
- //继承BroadcastReceiver子类的类名
105
- android : name =" .mBroadcastReceiver"
106
- //具有相应权限的广播发送者发送的广播才能被此BroadcastReceiver所接收;
107
- android : permission =" string"
108
- //BroadcastReceiver运行所处的进程
109
- //默认为app的进程,可以指定独立的进程
110
- //注:Android四大基本组件都可以通过此属性指定自己的独立进程
111
- android : process =" string" >
112
-
113
- //用于指定此广播接收器将接收的广播类型
114
- //本示例中给出的是用于接收网络状态改变时发出的广播
115
- <intent-filter >
116
- <action android : name =" android.net.conn.CONNECTIVITY_CHANGE" />
117
- </intent-filter >
95
+ <receiver
96
+ android : enabled =[" true" | " false" ]
97
+ //此broadcastReceiver能否接收其他App的发出的广播
98
+ //默认值是由receiver中有无intent-filter决定的:如果有intent-filter,默认值为true,否则为false
99
+ android : exported =[" true" | " false" ]
100
+ android : icon =" drawable resource"
101
+ android : label =" string resource"
102
+ //继承BroadcastReceiver子类的类名
103
+ android : name =" .mBroadcastReceiver"
104
+ //具有相应权限的广播发送者发送的广播才能被此BroadcastReceiver所接收;
105
+ android : permission =" string"
106
+ //BroadcastReceiver运行所处的进程
107
+ //默认为app的进程,可以指定独立的进程
108
+ //注:Android四大基本组件都可以通过此属性指定自己的独立进程
109
+ android : process =" string" >
110
+
111
+ //用于指定此广播接收器将接收的广播类型
112
+ //本示例中给出的是用于接收网络状态改变时发出的广播
113
+ <intent-filter >
114
+ <action android : name =" android.net.conn.CONNECTIVITY_CHANGE" />
115
+ </intent-filter >
118
116
</receiver >
119
117
```
120
118
121
119
- 注册示例
122
120
123
- ```
124
- <receiver
121
+ ``` xml
122
+ <receiver
125
123
//此广播接收者类是mBroadcastReceiver
126
124
android : name =" .mBroadcastReceiver" >
127
125
//用于接收网络状态改变时发出的广播
@@ -139,31 +137,30 @@ public class mBroadcastReceiver extends BroadcastReceiver {
139
137
140
138
``` Java
141
139
@Override
142
- protected void onResume(){
143
- super . onResume();
140
+ protected void onResume() {
141
+ super . onResume();
144
142
145
143
// 实例化BroadcastReceiver子类 & IntentFilter
146
- mBroadcastReceiver mBroadcastReceiver = new mBroadcastReceiver();
147
- IntentFilter intentFilter = new IntentFilter ();
144
+ mBroadcastReceiver mBroadcastReceiver = new mBroadcastReceiver();
145
+ IntentFilter intentFilter = new IntentFilter ();
148
146
149
147
// 设置接收广播的类型
150
- intentFilter. addAction(android.net.conn. CONNECTIVITY_CHANGE );
148
+ intentFilter. addAction(android.net.conn. CONNECTIVITY_CHANGE );
151
149
152
150
// 调用Context的registerReceiver()方法进行动态注册
153
- registerReceiver(mBroadcastReceiver, intentFilter);
154
- }
151
+ registerReceiver(mBroadcastReceiver, intentFilter);
152
+ }
155
153
156
154
157
155
// 注册广播后,要在相应位置记得销毁广播
158
156
// 即在onPause() 中unregisterReceiver(mBroadcastReceiver)
159
157
// 当此Activity实例化时,会动态将MyBroadcastReceiver注册到系统中
160
158
// 当此Activity销毁时,动态注册的MyBroadcastReceiver将不再接收到相应的广播。
161
- @Override
162
- protected void onPause() {
163
- super . onPause();
164
- // 销毁在onResume()方法中的广播
165
- unregisterReceiver(mBroadcastReceiver);
166
- }
159
+ @Override
160
+ protected void onPause() {
161
+ super . onPause();
162
+ // 销毁在onResume()方法中的广播
163
+ unregisterReceiver(mBroadcastReceiver);
167
164
}
168
165
```
169
166
@@ -308,7 +305,7 @@ sendBroadcast(intent);
308
305
309
306
3 . 发送广播时指定该广播接收器所在的包名,此广播将只会发送到此包中的App内与之相匹配的有效广播接收器中。
310
307
311
- > 通过** intent.setPackage(packageName)** 指定报名
308
+ > 通过 ** intent.setPackage(packageName)** 指定报名
312
309
313
310
- 具体使用2 - 使用封装好的LocalBroadcastManager类
314
311
使用方式上与全局广播几乎相同,只是注册/取消注册广播接收器和发送广播时将参数的context变成了LocalBroadcastManager的单一实例
0 commit comments