01 Android基础--广播
- 什么是广播?
- 广播的分类
- 本地广播LocalBroadcastManager
什么是广播?
传输信息的机制
。 主要记住三个要素:1.广播(Broadcast
) - 用于发送广播
;
2.广播接收器(BroadcastReceiver
) - 用于接收广播
;3.意图内容(Intent
) - 广播相关信息的媒介
广播的分类
(1)按照注册的方式分类
-
静态广播:在
XML文件中
注册的广播,activity销毁了,还能接收广播
-
动态广播:用
JAVA代码
注册的广播。activity销毁了,广播接收不了了
// 静态广播
// 第一步:广播接收着
public class MyBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
// 收到广播消息
}
}
//第二步:在xml中注册广播接收器
<receiver android:name=".MyBroadcastReceiver" >
<intent-filter>
<action android:name="my_broadcaster_action"></action>
<intent-filter>
</receiver>
// 第三步:发送广播
Intent intent = new Intent();
intent.setAction="my_broadcaster_action");
intent.putExtra("key_data", filePath);
// 发送广播
sendBroadcast(intent);
// 动态广播:
// 第一步:广播接收着
public class MyBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
// 收到广播消息
}
}
//第二步:用JAVA代码注册的广播接收器
// new 出广播接收器的对象
receiver = new MyBroadcastReceiver();
// 设置Action过滤
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction("my_broadcaster_action");
// 注册广播接收器
registerReceiver(receiver, intentFilter);
// 第三步:发送广播
Intent intent = new Intent();
intent.setAction="my_broadcaster_action");
intent.putExtra("key_data", filePath);
// 发送广播
sendBroadcast(intent);
补充:
<receiver
android:name=".MyBroadcastReceiver"
android:enabled="true"
android:exported="true">
<intent-filter>
<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
</intent-filter>
</receiver>
android:exported:此BroadcastReceiver能否接收其他App发出的广播(其默认值是由receiver中有无intent-filter决定的,如果有intent-filter,默认值为true,否则为false);
android:name:此broadcastReceiver类名;
android:permission:如果设置,具有相应权限的广播发送方发送的广播才能被此broadcastReceiver所接收;
android:process:broadcastReceiver运行所处的进程。默认为App的进程。可以指定独立的进程(Android四大组件都可以通过此属性指定自己的独立进程);
(2)按照发送的方式分类
-
标准广播
-
有序广播
标准广播:广播接收器会在同一时刻接收到这条广播消息,没有先后顺序
有序广播:有先后顺序, 并且可以截断正在传递的广播,截断以后,后面就收不到消息了
(3)按照定义的方式分类
-
系统广播:Android系统中内置了多个系统广播,电池电量,有没有网络等等
-
自定义广播:自己写的
本地广播LocalBroadcastManager
安全
。 使用该机制发出的广播只能够在应用程序内部
进行传递,并且广播接收器也只能接收来自本地应用程序发出的广播。
// 第一步:广播接收着
class LocalReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(context, "received local broadcast", Toast.LENGTH_SHORT).show();
}
}
//第二步:注册的广播接收器
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction("com.example.broadcasttest.LOCAL_BROADCAST");
localReceiver = new LocalReceiver();
localBroadcastManager.registerReceiver(localReceiver, intentFilter);
// 第三步:发送广播
Intent intent = new Intent("com.example.broadcasttest.LOCAL_BROADCAST");
localBroadcastManager.sendBroadcast(intent);