赞
踩
BroadCastReceiver广播接受者,安卓四大组件之一
广播三要素:
(1)广播发送者 : 发送广播
(2)广播接收者(调频): 用于接收广播
(3)要处理的事情 :处理广播的相关信息, Intent有图对象
广播的使用场景:
(1)同一APP下多个组件之间传递数据(Activity/Fragment/Service之间传递数据)
(2)2个APP之间传递数据
技能get点:
(1)自定义广播接受者
(2)使用广播接受者进行电话拦截和短信拦截和系统电量的变化
(1)自定义类继承BroadcastReceiver,重写onReceive方法
(2)注册广播(安卓的四大组件都需要注册)
静态注册:在清单文件中
动态注册:在代码中注册(注册和接触注册)
静态注册和动态注册的区别:假如说Activity是接受者:
动态注册:
(1)广播会跟Activity的生命周期的结束而结束;
(2)自由的控制注册和取消,有很大的灵活性
(3)动态注册在结束应用时就会消失
静态注册:
(1)广播不会跟随Activity的生命周期的结束而结束,一直存在,即使应用程序关闭,也会被唤醒接受广播
(2)全局的广播
(3)静态注册除非下载应用,否则会一直存在
注册、解除注册
onCreate():注册广播调用Context的registerReceiver()方法
onDestory():解除注册调用Context的unregisterReceiver()方法
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); }
特点
无序广播无法掐断广播
有序广播可以掐断广播
优先级从大到小
有序广播的方法
//掐断广播
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>
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(); } } } } }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。