博客
关于我
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/

你可能感兴趣的文章
Qt笔记——模型/视图MVD 文件目录浏览器软件
查看>>
POJ 2892 Tunnel Warfare(树状数组+二分)
查看>>
poj 2965 The Pilots Brothers' refrigerator-1
查看>>
poj 3026( Borg Maze BFS + Prim)
查看>>
POJ 3041 - 最大二分匹配
查看>>
POJ 3041 Asteroids(二分匹配模板题)
查看>>
Qt笔记——标准文件对话框QFileDialog
查看>>
poj 3083 Children of the Candy Corn
查看>>
POJ 3083 Children of the Candy Corn 解题报告
查看>>
POJ 3253 Fence Repair C++ STL multiset 可解 (同51nod 1117 聪明的木匠)
查看>>
Qt笔记——控件总结
查看>>
poj 3262 Protecting the Flowers 贪心
查看>>
poj 3264(简单线段树)
查看>>
Qt笔记——布局管理三件套分割窗口、停靠窗口和堆栈窗口
查看>>
poj 3277 线段树
查看>>
POJ 3349 Snowflake Snow Snowflakes
查看>>
POJ 3411 DFS
查看>>
poj 3422 Kaka's Matrix Travels (费用流 + 拆点)
查看>>
Qt笔记——官方文档全局定义(二)Functions函数
查看>>
POJ 3468 A Simple Problem with Integers
查看>>