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

你可能感兴趣的文章
Objective-C实现pow函数功能(附完整源码)
查看>>
Objective-C实现prefix conversions string前缀转换字符串算法(附完整源码)
查看>>
Objective-C实现prefix conversions前缀转换算法(附完整源码)
查看>>
Objective-C实现pressure conversions压力转换算法(附完整源码)
查看>>
Objective-C实现Prim 算法生成图的最小生成树MST算法(附完整源码)
查看>>
Objective-C实现prime sieve eratosthenes埃拉托斯特尼素数筛选法算法(附完整源码)
查看>>
Objective-C实现PrimeFactors质因子分解算法 (附完整源码)
查看>>
Objective-C实现prim普里姆算法(附完整源码)
查看>>
Objective-C实现PriorityQueue优先队列算法(附完整源码)
查看>>
Objective-C实现proth number普罗斯数算法(附完整源码)
查看>>
Objective-C实现pythagoras哥拉斯算法(附完整源码)
查看>>
Objective-C实现QLearning算法(附完整源码)
查看>>
Objective-C实现QR正交三角分解法算法(附完整源码)
查看>>
Objective-C实现qubit measure量子位测量算法(附完整源码)
查看>>
Objective-C实现Queue队列算法(附完整源码)
查看>>
Objective-C实现Queue队列算法(附完整源码)
查看>>
Objective-C实现quick select快速选择算法(附完整源码)
查看>>
Objective-C实现rabin-karp算法(附完整源码)
查看>>
Objective-C实现radians弧度制算法(附完整源码)
查看>>
Objective-C实现radianToDegree弧度到度算法(附完整源码)
查看>>