广播
16lz
2021-01-26
Android工程搭建
- BroadCastReceiver
- 一、BroadCastReceiver介绍
- 二、如何实现广播
- A、广播接受者
- B、广播发送方:sendBroadcast(Intent意图对象)
- 三、代码
- A、无序广播
- 静态注册
- 动态注册
- B、有序广播
- C、发送的方法
- 1.无序 : sendBroadcast()
- 2.有序 : sendOrderBroadcast()
- 3. 粘性 : sendStickyBroadcast()
- 四、系统广播
BroadCastReceiver
一、BroadCastReceiver介绍
BroadCastReceiver广播接受者,安卓四大组件之一广播三要素:(1)广播发送者 : 发送广播(2)广播接收者(调频): 用于接收广播(3)要处理的事情 :处理广播的相关信息, Intent有图对象广播的使用场景:(1)同一APP下多个组件之间传递数据(Activity/Fragment/Service之间传递数据)(2)2个APP之间传递数据技能get点:(1)自定义广播接受者(2)使用广播接受者进行电话拦截和短信拦截和系统电量的变化
二、如何实现广播
A、广播接受者
(1)自定义类继承BroadcastReceiver,重写onReceive方法
(2)注册广播(安卓的四大组件都需要注册)
静态注册:在清单文件中
动态注册:在代码中注册(注册和接触注册)
B、广播发送方:sendBroadcast(Intent意图对象)
静态注册和动态注册的区别:假如说Activity是接受者:动态注册:(1)广播会跟Activity的生命周期的结束而结束;(2)自由的控制注册和取消,有很大的灵活性(3)动态注册在结束应用时就会消失静态注册:(1)广播不会跟随Activity的生命周期的结束而结束,一直存在,即使应用程序关闭,也会被唤醒接受广播(2)全局的广播(3)静态注册除非下载应用,否则会一直存在
三、代码
注册、解除注册
onCreate():注册广播调用Context的registerReceiver()方法onDestory():解除注册调用Context的unregisterReceiver()方法
A、无序广播
public class MyBroadcast extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { if(intent.getAction().equals("com.xh.broad")){ String mes = intent.getStringExtra("mes"); Toast.makeText(context, "开始广播:"+mes, Toast.LENGTH_SHORT).show(); } }}
静态注册
清单文件注册
<!-- 注册广播 --> <receiver android:name=".MyBroadcast"> <intent-filter> <!-- 频道 --> <action android:name="com.xh.broad" /> </intent-filter> </receiver>
动态注册
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main);//动态注册广播 myBroadcast2 = new MyBroadcast2(this); IntentFilter intentFilter = new IntentFilter(); intentFilter.addAction("com.xh.broad.dong"); registerReceiver(myBroadcast2,intentFilter);}@Override protected void onDestroy() { super.onDestroy(); //销毁广播 unregisterReceiver(myBroadcast2); }
B、有序广播
特点
无序广播无法掐断广播有序广播可以掐断广播优先级从大到小
有序广播的方法
//掐断广播 abortBroadcast();
清单注册
<!-- 有序广播:范围-1000至1000 --> <receiver android:name=".order.MyBroadcast_wu"> <intent-filter android:priority="-1000"><!-- 优先级 --> <action android:name="com.xh.order"></action> </intent-filter> </receiver> <receiver android:name=".order.MyBroadcast_you"> <intent-filter android:priority="1000"> <action android:name="com.xh.order"></action> </intent-filter> </receiver>
C、发送的方法
1.无序 : sendBroadcast()
2.有序 : sendOrderBroadcast()
3. 粘性 : sendStickyBroadcast()
四、系统广播
https://blog.csdn.net/cc_want/article/details/82344899
public class MainActivity extends AppCompatActivity { MyBroad myBroad; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); myBroad = new MyBroad(); IntentFilter intentFilter = new IntentFilter(); intentFilter.addAction(Intent.ACTION_BATTERY_CHANGED);//电量改变 intentFilter.addAction(Intent.ACTION_BATTERY_LOW);//低电量 intentFilter.addAction(Intent.ACTION_BATTERY_OKAY);//电量充足 intentFilter.addAction(Intent.ACTION_SCREEN_ON);//开屏 intentFilter.addAction(Intent.ACTION_SCREEN_OFF);//锁屏 intentFilter.addAction(Intent.ACTION_AIRPLANE_MODE_CHANGED);//飞行模式改变 intentFilter.addAction(Intent.ACTION_CAMERA_BUTTON);//按下拍照键时 intentFilter.addAction(Intent.ACTION_EXTERNAL_APPLICATIONS_UNAVAILABLE);//正在移动APP时,发出的广播 intentFilter.addAction(Intent.ACTION_HEADSET_PLUG);//在耳机口上插入耳机时发出的广播 registerReceiver(myBroad,intentFilter); }}
public class MyBroad extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { if(intent.getAction().equals(Intent.ACTION_BATTERY_CHANGED)){//电量发生改变 int level = intent.getIntExtra("level", 0); Toast.makeText(context, "当前电量:"+level, Toast.LENGTH_SHORT).show(); }else if(intent.getAction().equals(Intent.ACTION_BATTERY_LOW)){//低电量 Toast.makeText(context, "当前电量过低,请及时充电!", Toast.LENGTH_SHORT).show(); }else if(intent.getAction().equals(Intent.ACTION_BATTERY_OKAY)){//电量充足 Toast.makeText(context, "电量充足!", Toast.LENGTH_SHORT).show(); }else if(intent.getAction().equals(Intent.ACTION_SCREEN_OFF)){//锁屏 Toast.makeText(context, "锁屏!", Toast.LENGTH_SHORT).show(); }else if(intent.getAction().equals(Intent.ACTION_SCREEN_ON)){//开屏 Toast.makeText(context, "开屏!", Toast.LENGTH_SHORT).show(); }else if(intent.getAction().equals(Intent.ACTION_AIRPLANE_MODE_CHANGED)){//飞行模式改变 Bundle extras = intent.getExtras(); String state = extras.get("state").toString(); if(state.equals("true")){ Toast.makeText(context, "开启飞行:"+state, Toast.LENGTH_SHORT).show(); }else if(state.equals("false")){ Toast.makeText(context, "关闭飞行:"+state, Toast.LENGTH_SHORT).show(); } }else if(intent.getAction().equals(Intent.ACTION_CAMERA_BUTTON)){//按下拍照键 Toast.makeText(context, "拍照了:", Toast.LENGTH_SHORT).show(); }else if(intent.getAction().equals(Intent.ACTION_EXTERNAL_APPLICATIONS_UNAVAILABLE)){//正在移动APP时,发出的广播 Toast.makeText(context, "正在移动APP时,发出的广播:", Toast.LENGTH_SHORT).show(); }else if(intent.getAction().equals(Intent.ACTION_HEADSET_PLUG)){//在耳机口上插入耳机时发出的广播 boolean state = intent.hasExtra("state"); if(state){ int extra = intent.getIntExtra("state", 0); if(extra==0){ Toast.makeText(context, "拔出耳机", Toast.LENGTH_SHORT).show(); }else{ Toast.makeText(context, "插入耳机", Toast.LENGTH_SHORT).show(); } } } }}
更多相关文章
- android:priority
- Android(java)学习笔记123:Clock app编写报错01
- Android之Widget (微件、小组件)
- Android平台上PMEM的使用及Platform设备注册(二)
- Android(安卓)Launcher 应用的安装、更新、移除介绍
- 曾经的笔记——android的学习笔记(广播接收者)
- BroadcastReceive介绍
- Android使用广播(BroadCast)实现强制下线的方法
- android用服务service与广播broadcastreceiver创建开机启动服务