本文共 4164 字,大约阅读时间需要 13 分钟。
广播是一种强大的跨进程通信机制,在Android开发中具有重要的应用价值。本文将详细介绍如何使用Android广播进行数据传输,还将涵盖优先级广播和本地广播的相关知识。
在发送广播之前,需要定义一个广播接收器(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); } }); }} 有序广播可以确保多个广播接收器按照特定顺序接收到广播。在发送广播时,可以通过sendOrderedBroadcast()方法指定接收器的顺序:
sendOrderedBroadcast(intent, null);
为了控制接收器的接收顺序,可以在AndroidManifest.xml中为接收器设置优先级:
使用本地广播可以避免跨应用的安全问题,广播仅在应用内部传递。以下是本地广播的实现示例:
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中注册和注销。
转载地址:http://udajz.baihongyu.com/