博客
关于我
Android学习笔记之——发送broadcast
阅读量:508 次
发布时间:2019-03-07

本文共 4164 字,大约阅读时间需要 13 分钟。

如何在Android中发送和接收广播

广播是一种强大的跨进程通信机制,在Android开发中具有重要的应用价值。本文将详细介绍如何使用Android广播进行数据传输,还将涵盖优先级广播和本地广播的相关知识。

1. 发送标准广播

在发送广播之前,需要定义一个广播接收器(BroadcastReceiver)来接收这个广播。在quivos是否正确接收到广播前,发送也没有任何意义。因此,首先需要创建一个MyBroadcastReceiver类,代码如下:

package com.example.broadcasttest;import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;import android.widget.Toast;public class MyBroadcastReceiver extends BroadcastReceiver {    @Override    public void onReceive(Context context, Intent intent) {        Toast.makeText(context, "接收到广播", Toast.LENGTH_SHORT).show();    }}

接下来,在AndroidManifest.xml中对这个广播接收器进行配置:

接下来,定义发送广播的按钮,并在MainActivity中实现点击按钮的逻辑:

package com.example.broadcasttest;import androidx.appcompat.app.AppCompatActivity;import android.content.BroadcastReceiver;import android.content.ComponentName;import android.content.Context;import android.content.Intent;import android.content.IntentFilter;import android.net.ConnectivityManager;import android.net.NetworkInfo;import android.os.Bundle;import android.view.View;import android.widget.Button;import android.widget.Toast;public class MainActivity extends AppCompatActivity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        Button button = (Button) findViewById(R.id.button);        button.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                Intent intent = new Intent("com.example.broadcasttest.MY_BROADCAST");                intent.setComponent(new ComponentName("com.example.broadcasttest", "com.example.broadcasttest.MyBroadcastReceiver"));                sendBroadcast(intent);            }        });    }}

2. 发送有序广播

有序广播可以确保多个广播接收器按照特定顺序接收到广播。在发送广播时,可以通过sendOrderedBroadcast()方法指定接收器的顺序:

sendOrderedBroadcast(intent, null);

为了控制接收器的接收顺序,可以在AndroidManifest.xml中为接收器设置优先级:

3. 本地广播的使用

使用本地广播可以避免跨应用的安全问题,广播仅在应用内部传递。以下是本地广播的实现示例:

package com.example.broadcasttest;import androidx.appcompat.app.AppCompatActivity;import androidx.localbroadcastmanager.content.LocalBroadcastManager;import android.content.BroadcastReceiver;import android.content.ComponentName;import android.content.Context;import android.content.Intent;import android.content.IntentFilter;import android.net.ConnectivityManager;import android.net.NetworkInfo;import android.os.Bundle;import android.view.View;import android.widget.Button;import android.widget.Toast;public class MainActivity extends AppCompatActivity {    private LocalReceiver localReceiver;    private LocalBroadcastManager localBroadcastManager;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        localBroadcastManager = LocalBroadcastManager.getInstance(this);        Button button = (Button) findViewById(R.id.button);        button.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                Intent intent = new Intent("com.example.broadcasttest.LOCAL_BROADCAST");                localBroadcastManager.sendBroadcast(intent);                Toast.makeText(this, "发送了本地广播", Toast.LENGTH_SHORT).show();            }        });        intentFilter = new IntentFilter();        intentFilter.addAction("com.example.broadcasttest.LOCAL_BROADCAST");        localReceiver = new LocalReceiver();        localBroadcastManager.registerReceiver(localReceiver, intentFilter);    }    @Override    protected void onDestroy() {        super.onDestroy();        localBroadcastManager.unregisterReceiver(localReceiver);    }    class LocalReceiver extends BroadcastReceiver {        @Override        public void onReceive(Context context, Intent intent) {            Toast.makeText(context, "接收到本地广播", Toast.LENGTH_SHORT).show();        }    }}

本地广播的接收器不能通过静态注册方式接收,必须在Activity Lifecycle friendships中注册和注销。

4. 参考资料

转载地址:http://udajz.baihongyu.com/

你可能感兴趣的文章
python+flask计算机毕业设计高校危化品管理系统(程序+开题+论文)
查看>>
python+flask计算机毕业设计高校教学档案管理系统(程序+开题+论文)
查看>>
python+flask计算机毕业设计高校教学督导平台(程序+开题+论文)
查看>>
python+flask计算机毕业设计高校校内景点平台(程序+开题+论文)
查看>>
python+flask计算机毕业设计高校校园线上跳蚤市场的系统设计(程序+开题+论文)
查看>>
Python图形处理
查看>>
python+flask计算机毕业设计高校物品使用互益平台的设计与实现(程序+开题+论文)
查看>>
Python函数,匿名函数,高阶函数,内置函数——08
查看>>
python+flask计算机毕业设计高校疫情防控管理平台(程序+开题+论文)
查看>>
python+flask计算机毕业设计高校网上迎新系统(程序+开题+论文)
查看>>
python+flask计算机毕业设计高校运动会(程序+开题+论文)
查看>>
python+flask计算机毕业设计高校选课系统(程序+开题+论文)
查看>>
Python+Jenkins+Allure Report接口自动化测试持续集成
查看>>
python+locust电商全流程性能测试
查看>>
Python函数运行的可执行文件的终端输出如何以一般方式静音?
查看>>
Python+Pytest+Allure+Git+Jenkins接口自动化框架
查看>>
python+pytest接口自动化 —— 参数关联
查看>>
python+pytest接口自动化 —— 参数关联
查看>>
Python+pytest接口自动化 —— 接口测试基础
查看>>
python+pytest接口自动化 —— 自动化用例编写思路 (使用pytest编写一个测试脚本)
查看>>