一 接收广播
系统广播:定义BroadcastReceiver 运行在主线程,在onReceive(Content c,Intent intent)中操作。
静态注册 未启动也能收到相应的广播 android:enabled=“true” 表示可以接收外部广播
动态注册 指定action,应用启动时才能获得广播
android.net.conn.CONNECTIVITY_CHANGED //网络变化
intent.ACTION_AIRPLANE_MODE_CHANGED //飞行模式打开/关闭
intent.ACTION_BATTERY_CHANGED //电量发生变化时,充电时
intent.ACTION_BATTERY_LOW //电量过低
intent.ACTION_BATTERY_OKAY //电量充足
intent.ACTION_BOOT_COMPLETED //拍照确定按钮 硬件按钮
intent.ACTION_CLOSE_SYSTEM_DIALOGS //屏幕锁屏
intent_ACTION_CONFIGURATION_CHANGED //系统设置改变 如语言 设备方向
intent_ACTION_HEADSET_PLUG //插入耳机
intent_ACTION_PACKAGE_ADDED //应用安装成功
intent_ACTION_PACKAGE_REMOVED //应用删除
intent_ACTION_SCREEN_ON /OFF //屏幕打开、关闭
......
例: IntentFIlter filter=new IntentFilter();
filter.addAction("android.net.conn.CONNECTIVITY_CHANGED");
registerReceiver(广播接收器,filter);
二 发送广播
.
有序 sendOrderBroadcase() 在注册时指定 android:priority 的优先级, abortBroadcast()截断广播
标准 sendBraodcast
三 本地广播
上面发送的都是全局广播,其他应用也能收的到,为了避免这种情况需要发送本地广播,只能app内部收到广播
LocalBroadcastManager 发送广播 manager.sendBroadcast() 动态注册manager.registerReceiver();
其他
前台广播&后台广播:查资料是说根据Intent 的flag不同会加入不同的队列中。默认不带,所以一般发送的都是后台广播。
intent.addFlags(Intent.FLAG_RECEIVER_FOREGROUND);//使用前台广播
ANR:后台 60s 前台10s