Android四大控件之BroadcastReceiver

本文深入讲解Android中的BroadcastReceiver,包括其基本概念、静态与动态注册方式、无序及有序广播的区别与使用方法,并演示如何通过实例操作实现广播的发送与接收。

今天本人学了Android中BroadcastReceiver的相关知识,想和大家来一起分享分享。

BroadcastReceiver的意思就是“广播接收者”,用来接收来自系统和应用中的广播。

其实在我们还没有接触BroadcastReceiver之前就有用过广播,例如当网络改变时系统会产生一条广播,接收到这条广播就能及时地做出提示和保存数据等操作。

下面我们就对BroadcastReceiver逐一地分析和演练,了解和掌握它的各种功能和用法。

在演示之前我们先创建一个demo为Sender(发送者)

在Sender这里,我们需要一个发送信息的界面,界面我就简单化了:

activity_main.xml

<EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_conten"
        android:id="@+id/et_main_content"
        android:hint="请输入发送的内容"/>
<Button
        android:layout_width="match_parent"
        android:layout_height="wrap_conten"
        android:test="确定"
        android:onClick="send"

在mainactivity.Java中

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
       //获得发送ID
        et_main_content = (EditText) findViewById(R.id.et_main_content);
    }
    public void send(View view){
        String content=et_main_content.getText().toString();
        Intent intent=new Intent();
        //指定广播的名字;名字不能随便去必须是包名点你自己取一个名字
        intent.setAction("com.smi.administrator.android_sender.Hug");
        //指定广播内容
        intent.putExtra("content",content);
        //发送无序广播
        sendBroadcast(intent);
      

      //发送有序广播
      //需要一个权限参数,如果为null则表示不要求接收者声明指定的权限,如果不为null,则表示接收者若要接收此广播,需声明指定权限
     sendOrderedBroadcast(intent,null);


 }}



静态注册

静态注册是在MyReceiver01中的AndroidManifest.xml文件中配置的,MyReceiver02也是一样的

<receiver android:name=".MyReceiver01"
     <intent-filter>
        <action android:name="com.smi.administrator.android_sender.Hug">
     </intent-filter>
</receiver>



动态注册

在MyReceiver01中的MainActivity.Java代码实现,那么MyReceiver02也是一样的

 @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        myReceiver01 = new MyReceiver01();
        intentFilter = new IntentFilter();

        intentFilter.addAction("com.smj.administrator.android_sender.Hug");

         intentFilter.setPriority(999);

    }

    @Override
    protected void onResume() {
        super.onResume();
        //注册广播
        registerReceiver(myReceiver01,intentFilter);
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        //取消注册  注销
       unregisterReceiver(myReceiver01);
    }



无序广播

普通广播对于多个接收者来说是完全异步的,通常每个接收者都无需等待即可以接收到广播,接收者相互之间不会有影响。对于这种广播,接收者无法终止广播,即无法阻止其他接收者的接收动作。

为了验证以上论断,我们新建俩个Receiver,分别为MyReceiver01,MyReceiver02


public class MyReceiver01 extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
       //获取广播的名字
        String action=intent.getAction();
        if("com.smi.administrator.android_sender.Hug".equals(action)){
            //获取广播内容
            String content=intent.getStringExtra("content");
            Log.i("test","广播接受者1号:"+content);
        }
    }
}



public class MyReceiver02 extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
       //获取广播的名字
        String action=intent.getAction();
        if("com.smi.administrator.android_sender.Hug".equals(action)){
            //获取广播内容
            String content=intent.getStringExtra("content");
            Log.i("test","广播接受者2号:"+content);
        }
    }


有序广播

有序广播比较特殊,它每次只发送到优先级较高的接收者那里,然后由优先级高的接受者再传播到优先级低的接收者那里,优先级高的接收者有能力终止这个广播。

发送有序广播见在mainactivity.Java中的红色字体

下面是怎样接收有序广播:

静态注册的优先级:在xml中的<intent-filter>多了一个android:priority属性,并且依次减小。这个属性的范围在-1000到1000,数值越大,优先级越高。

动态注册的优先级:在MainActivity.java代码中设置,见动态注册中的红色字体

注意:无序广播是不能设置优先级的

当然有序广播中还有一个这样的功能,改变广播中的内容

例如:改变MyReceiver02中的内容,但是不改变MyReceiver01,那MyReceiver02就得添加内容。

在MyReceiver02中设置:



public class MyReceiver02 extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
       //获取广播的名字
        String action=intent.getAction();
        if("com.zking.administrator.g160628_android21_sender.Hug".equals(action)){
            //获取广播内容
            String content=intent.getStringExtra("content");
            Log.i("test","广播接受者2号:"+content);

            //判断
            if(content.contains("免费")){
                //不传播
                abortBroadcast();
            }


            //改变广播的内容
            //设置结果
            Bundle bundle=new Bundle();
            bundle.putString("newContent",content+",传递的内容有免费二字");
            setResultExtras(bundle);
        }
    }


那么MyRecetity01就要怎样去拿去值:


public class MyReceiver01 extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
       //获取广播的名字
        String action=intent.getAction();
        if("com.zking.administrator.g160628_android21_sender.Hug".equals(action)){
            //获取广播内容
            //String content=intent.getStringExtra("content");

            //获取结果
            Bundle bundle=getResultExtras(true);
            String content=bundle.getString("newContent");
            Log.i("test","广播接受者1号:"+content);
        }
    }


还有最后一个功能:阻止广播传递

例如:MyReceiver02收到了一条信息,但是不想传递给MyReceiver01。

见上面的紫色字体






代码转载自:https://pan.quark.cn/s/a4b39357ea24 本文重点阐述了利用 LabVIEW 软件构建的锁相放大器的设计方案及其具体实施流程,并探讨了该设备在声波相位差定位系统中的实际运用情况。 锁相放大器作为一项基础测量技术,其核心功能在于能够精确锁定微弱信号的频率参数并完成相关测量工作。 在采用 LabVIEW 软件开发的锁相放大器系统中,通过计算测量信号与两条参考信号之间的互相关函数,实现对微弱信号的频率锁定,同时输出被测信号的幅值信息。 虚拟仪器技术是一种基于计算机硬件平台的仪器系统,其显著特征在于用户可以根据实际需求自主设计仪器功能,配备虚拟化操作界面,并将测试功能完全由专用软件程序实现。 虚拟仪器系统的基本架构主要由计算机主机、专用软件程序以及硬件接口模块等核心部件构成。 虚拟仪器最突出的优势在于其功能完全取决于软件编程,用户可以根据具体应用场景灵活调整系统功能参数。 在基于 LabVIEW 软件开发的锁相放大器系统中,主要运用 LabVIEW 软件平台完成锁相放大器功能的整体设计。 LabVIEW 作为一个图形化编程环境,能够高效地完成虚拟仪器的开发工作。 借助 LabVIEW 软件,可以快速构建锁相放大器的用户操作界面,并且可以根据实际需求进行灵活调整和功能扩展。 锁相放大器系统的关键构成要素包括测量信号输入通道、参考信号输入通道、频率锁定处理单元以及信号幅值输出单元。 测量信号是系统需要检测的对象,参考信号则用于引导系统完成对测量信号的频率锁定。 频率锁定处理单元负责实现测量信号的锁定功能,信号幅值输出单元则负责输出被测信号的幅值大小。 在锁相放大器的实际实现过程中,系统采用了双路参考信号输入方案来锁定测量信号。 通过分析两路参考信号之间的相...
边缘计算环境中基于启发式算法的深度神经网络卸载策略(Matlab代码实现)内容概要:本文介绍了在边缘计算环境中,利用启发式算法实现深度神经网络任务卸载的策略,并提供了相应的Matlab代码实现。文章重点探讨了如何通过合理的任务划分与调度,将深度神经网络的计算任务高效地卸载到边缘服务器,从而降低终端设备的计算负担、减少延迟并提高整体系统效率。文中涵盖了问题建模、启发式算法设计(如贪心策略、遗传算法、粒子群优化等可能的候选方法)、性能评估指标(如能耗、延迟、资源利用率)以及仿真实验结果分析等内容,旨在为边缘智能计算中的模型推理优化提供可行的技术路径。; 适合人群:具备一定编程基础,熟悉Matlab工具,从事边缘计算、人工智能、物联网或智能系统优化方向的研究生、科研人员及工程技术人员。; 使用场景及目标:①研究深度神经网络在资源受限设备上的部署与优化;②探索边缘计算环境下的任务卸载机制与算法设计;③通过Matlab仿真验证不同启发式算法在实际场景中的性能表现,优化系统延迟与能耗。; 阅读建议:建议读者结合提供的Matlab代码进行实践操作,重点关注算法实现细节与仿真参数设置,同时可尝试复现并对比不同启发式算法的效果,以深入理解边缘计算中DNN卸载的核心挑战与解决方案。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值