未分类

安卓开发(四) 四大组件—广播

本文主要记录第一行代码中安卓开发流程总结和个人安卓APP开发中遇到的实战问题解决方案

大纲

广播机制

应用程序可以对自己感兴趣的广播(系统或者别的应用程序发出的)注册,就可以接受到自己关心的广播内容

广播类型

1.标准广播(Normal Broadcasts):完全异步执行,发出后所有接收器同时接收到这条广播,无法截断,效率很高
2.有序广播(Orderd broadcasts):完全同步执行,发出后只有一个接收器接收到这条广播,接收器接收广播逻辑执行完成后广播才会继续传递,因此接收器是有优先级,可被截断

系统广播

Android内置许多系统级别的广播,如手机开机、电量变化、网络变化等

注册广播接收器

两种注册方式:1.在代码中注册(动态注册)2.在AndroidManifest.xml中注册(静态注册)

代码中注册(动态注册)

1.新建广播接收类A:继承BroadcastReceiver重写其onReceive方法

2.声明创建IntentFilter对象:用于调用其.addAction()方法添加监听的广播

3.实例化广播接收类A对象B

4.注册广播registerReceiver(B,IntentFilter)

5.取消注册广播unregisterReceiver(B)

6.声明B所需的权限(视监听的广播情况而定)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
public class MainActivity extends AppCompatActivity {
private IntentFilter intentFilter;
private NetworkChangeReceiver networkChangeReceiver;

@Override
protected void onCreate(Bundle savedInstanceState) {
...
//2.声明创建IntentFilter对象
intentFilter=new IntentFilter();
intentFilter.addAction("android.net.conn.CONNECTIVITY_CHANGE");
//3.实例化广播接收类对象
networkChangeReceiver=new NetworkChangeReceiver();
//4.注册广播
registerReceiver(networkChangeReceiver,intentFilter);
}

//1.新建广播接收类
class NetworkChangeReceiver extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent){
//接收到广播执行相应逻辑
}
}

@Override
protected void onDestroy(){
...
//5.取消注册广播
unregisterReceiver(networkChangeReceiver);
}
}

AndroidManifest.xml中注册(静态注册)

1.类似动态注册新建广播接收类A

2.注册广播

3.添加对应的监听广播

4.添加权限

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
//1.类似动态注册新建广播接收类
public class BootCompleteReceiver extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent){
//接收到广播执行相应逻辑
}
}
//2.注册广播
<receiver
android:name=".BootCompleteReceiver"
android:enabled="true"
android:exported="true">
//3.添加对应的监听广播
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED"/>
</intent-filter>
</receiver>
//4.添加权限
<uses-permission anroid:name="android.permission.RECEIVE_BOOT_COMPLETED" />