当前位置:   article > 正文

广播_广播的要素

广播的要素

BroadCastReceiver

一、BroadCastReceiver介绍

在这里插入图片描述

BroadCastReceiver广播接受者,安卓四大组件之一
广播三要素:
(1)广播发送者 :       发送广播
(2)广播接收者(调频):      用于接收广播
(3)要处理的事情  :处理广播的相关信息, Intent有图对象
广播的使用场景:
(1)同一APP下多个组件之间传递数据(Activity/Fragment/Service之间传递数据)
(2)2个APP之间传递数据
技能get点:
(1)自定义广播接受者
(2)使用广播接受者进行电话拦截和短信拦截和系统电量的变化
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

二、如何实现广播

A、广播接受者

(1)自定义类继承BroadcastReceiver,重写onReceive方法
(2)注册广播(安卓的四大组件都需要注册)
静态注册:在清单文件中
动态注册:在代码中注册(注册和接触注册)

B、广播发送方:sendBroadcast(Intent意图对象)

静态注册和动态注册的区别:假如说Activity是接受者:
动态注册:
(1)广播会跟Activity的生命周期的结束而结束;
(2)自由的控制注册和取消,有很大的灵活性
(3)动态注册在结束应用时就会消失
静态注册:
(1)广播不会跟随Activity的生命周期的结束而结束,一直存在,即使应用程序关闭,也会被唤醒接受广播
(2)全局的广播
(3)静态注册除非下载应用,否则会一直存在
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

三、代码

注册、解除注册

onCreate():注册广播调用Context的registerReceiver()方法
onDestory():解除注册调用Context的unregisterReceiver()方法
  • 1
  • 2
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();
        }
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
静态注册

清单文件注册

		<!-- 注册广播 -->
        <receiver android:name=".MyBroadcast">
            <intent-filter>
                <!-- 频道 -->
                <action android:name="com.xh.broad" />
            </intent-filter>
        </receiver>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
动态注册
		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);
		    }

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
B、有序广播

特点

无序广播无法掐断广播
有序广播可以掐断广播
优先级从大到小
  • 1
  • 2
  • 3

有序广播的方法

			//掐断广播
            abortBroadcast();
  • 1
  • 2

清单注册

		<!-- 有序广播:范围-10001000 -->
        <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>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
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);

    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
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();
                }
            }
        }
    }
}
  • 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
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小蓝xlanll/article/detail/472260
推荐阅读
相关标签
  

闽ICP备14008679号