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

你可能感兴趣的文章
PHP生成及获取JSON文件的方法
查看>>
PHP生成唯一不重复的编号
查看>>
PHP生成器-动态生成内容的数组
查看>>
PHP的ip2long和long2ip升级函数
查看>>
PHP的json_encode函数应用到微信接口问题(include \uxxxx will create fail)
查看>>
PHP的readfile函数和file_get_contents函数错误: Unable to find the wrapper "https"
查看>>
php的web路径获取
查看>>
php的一些小笔记--字符串
查看>>
php的几种运行模式CLI、CGI、FastCGI、mod_php
查看>>
php的四大特性八大优势
查看>>
RabbitMQ
查看>>
PHP的威胁函数与PHP代码审计实战
查看>>
PHP的引用举例
查看>>
PHP相关代码
查看>>
RabbitMQ
查看>>
php知识点记录
查看>>
PHP知识笔记:CGI, FastCGI, PHP-CGI, PHP-FPM, Spawn-FCGI区别
查看>>
PHP第三方登录—OAuth2.0协议
查看>>
php筛选js,php如何多条件筛选js代码
查看>>
R730服务器做了raid的硬盘,插在R720上面可以用吗?
查看>>