当前位置: 首页 > news >正文

Android四大组件————广播简单案例

一、标准广播基本使用

1. 定义标签
public static final String TAG="com.test.broadcast";
2. 发送
//发送标准广播
Intent intent = new Intent(TAG);
intent.putExtra("DATA1","AAAAAA");
intent.putExtra("DATA2","BBBBBB");
sendBroadcast(intent);
3. 注册(接收)
public class MyBroadcastReceiver extends BroadcastReceiver {@Overridepublic void onReceive(Context context, Intent intent) {Log.d("fxHou","收到广播 Data1="+intent.getStringExtra("DATA1"));Log.d("fxHou","收到广播 Data2="+intent.getStringExtra("DATA2"));}
}
IntentFilter filter = new IntentFilter();
filter.addAction(TAG);
BroadcastReceiver br = new MyBroadcastReceiver();
registerReceiver(br, filter);
4. 注销(必须要有注销,否则有可能导致内存泄漏)
unregisterReceiver(br); 

二、有序广播基本使用

1. 定义标签
public static final String TAG="com.test.broadcast";
2. 发送
//发送有序广播
Intent intent = new Intent(TAG);
intent.putExtra("DATA1","AAAAAA");
intent.putExtra("DATA2","BBBBBB");
sendOrderedBroadcast(intent,null);
3. 注册(接收)

(1)高等级的接收器

public class MyBroadcastReceiver extends BroadcastReceiver {@Overridepublic void onReceive(Context context, Intent intent) {Log.d("fxHou","收到广播 Data1="+intent.getStringExtra("DATA1"));Log.d("fxHou","收到广播 Data2="+intent.getStringExtra("DATA2"));}
}
IntentFilter filter = new IntentFilter();
filter.setPriority(100);//设置优先级(广播根据这个优先级,判断先通知谁,数字越大,优先级越高)
filter.addAction(TAG);
MyBroadcastReceiver br = new MyBroadcastReceiver();
registerReceiver(br, filter);

(2)低等级的接收器

public class MyBroadcastReceiverLow extends BroadcastReceiver {@Overridepublic void onReceive(Context context, Intent intent) {Log.d("fxHou","收到广播Low Data1="+intent.getStringExtra("DATA1"));Log.d("fxHou","收到广播Low Data2="+intent.getStringExtra("DATA2"));}
}
IntentFilter filter2 = new IntentFilter();
filter2.setPriority(90);//设置优先级(广播根据这个优先级,判断先通知谁,数字越大,优先级越高)
filter2.addAction(TAG);
br2 = new MyBroadcastReceiverLow();
registerReceiver(br2, filter2);

(3)打印结果

2023-02-28 17:05:13.799 28917-28917 fxHou 收到广播 Data1=AAAAAA
2023-02-28 17:05:13.799 28917-28917 fxHou 收到广播 Data2=BBBBBB
2023-02-28 17:05:13.807 28917-28917 fxHou 收到广播Low Data1=AAAAAA
2023-02-28 17:05:13.808 28917-28917 fxHou 收到广播Low Data2=BBBBBB
4. 拦截广播(高优先级拦截,不传递给低优先级)

(1)在高优先级的接收器中调用abortBroadcast();

public class MyBroadcastReceiver extends BroadcastReceiver {@Overridepublic void onReceive(Context context, Intent intent) {Log.d("fxHou","收到广播 Data1="+intent.getStringExtra("DATA1"));Log.d("fxHou","收到广播 Data2="+intent.getStringExtra("DATA2"));//中止广播(拦截有序广播不往下一个接收器传递)abortBroadcast();}
}

(2)打印结果(低优先级的监听器监听不到广播)

2023-02-28 17:05:13.799 28917-28917 fxHou 收到广播 Data1=AAAAAA
2023-02-28 17:05:13.799 28917-28917 fxHou 收到广播 Data2=BBBBBB
5. 注销
unregisterReceiver(br);
unregisterReceiver(br2); 

三、自定义权限广播

有时候我们想发一个系统广播给另外一个APP,但是又不希望所有的第三方APP都能监听到这条广播,就可以通过权限管理实现隔离。

1. 定义权限名称
public static final String MY_PERMISSION_NAME="com.my.permission.name";
2. 发送广播时,带上权限
sendBroadcast(intent,MY_PERMISSION_NAME); //标准广播,带权限
sendOrderedBroadcast(intent,MY_PERMISSION_NAME);//有序广播,带权限
3. 第三方的APP想要监听这条广播,就必须申请权限
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"package="com.soface.broadcastdemo"><!--申请广播权限--><uses-permission android:name="com.my.permission.name"/><applicationandroid:allowBackup="true"android:dataExtractionRules="@xml/data_extraction_rules"android:fullBackupContent="@xml/backup_rules"android:icon="@mipmap/ic_launcher"android:label="@string/app_name"android:roundIcon="@mipmap/ic_launcher_round"android:supportsRtl="true"android:theme="@style/Theme.BroadcastDemo"tools:targetApi="31"><activityandroid:name=".MainActivity"android:exported="true"><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity></application></manifest>

四、本地广播

1. 指定接收器的广播
Intent intent = new Intent();
intent.setComponent(new ComponentName("com.example.youyu4", "com.example.youyu4.MyBroadcastReceiver"));//参数为包名和类名,注意类名中要包括包名
sendBroadcast(intent);
2. 应用广播

(1) 写一个监听器

public class MyBroadcastReceiver extends BroadcastReceiver {@Overridepublic void onReceive(Context context, Intent intent) {Log.d("fxHou","收到广播 Data1="+intent.getStringExtra("DATA1"));Log.d("fxHou","收到广播 Data2="+intent.getStringExtra("DATA2"));}
}

(2) 注册

IntentFilter filter = new IntentFilter();
filter.addAction("TAG");
BroadcastReceiver br = new MyBroadcastReceiver();//本地广播管理器获取实例
LocalBroadcastManager localBroadcastManager = LocalBroadcastManager.getInstance(this);
//本地广播注册方式略有不同
localBroadcastManager.registerReceiver(br,filter);

(3) 注销

ocalBroadcastManager.unregisterReceiver(br);

(4)发送广播

Intent intent = new Intent("com.example.viewmodeltest.LOCALBROADCAST_TEST");
localBroadcastManager.sendBroadcast(intent);
http://www.xdnf.cn/news/840313.html

相关文章:

  • 2023韩顺平java从入门到精通151G 视频教程 下载
  • qq农场,不开通牧场也能给好友添加牧草(数据抓包分析,实现源码,图片讲解)
  • nodejs下载安装以及npm、yarn安装及配置教程
  • 开心的小明(dp)
  • DELL BIOS 中英文對照表
  • 中国十大最狠的流氓网站曝光!
  • 使用Easyswoole 搭建简单的Websoket服务
  • 【年度总结】互联网不行了?对IT技术行业的深度思考
  • Visual Studio 2017 : client version 1.22 is too old
  • 初识Lazarus和Free Pascal Compiler
  • OS X10.10.3正式版和Xcode 6.3正式版下载
  • 计算机u盘设备无法启动不了,系统提示“该设备无法启动(代码:10)”,USB设备不能开始工作怎么办?...
  • Android基础入门
  • 中文乱码另类解决办法,简单,方便!
  • 详解RS-485上下拉电阻的选择
  • 意甲官网在中国地区被假网劫持,竟声称赞助?
  • 全球电容生产厂商排名一览表
  • 从Java角度看区块链实践系列4:从区块结构的“链”结构结构以及Merkle树,什么是软硬分叉?
  • Java武林q传仙女下凡_请问谁有武林Q传之仙女下凡的秘笈
  • 微信开放平台生态系列(一)微信第三方平台开发定制服务商模式配置
  • 电视常用接口(TV,AV,S-Video,YCbCr/PCbCr,VGA,Scart,DVI/HDMI)
  • 思维1
  • 19个免费的ppt制作网站
  • 名人博客大全
  • 我的闲鱼Python爬虫接单总结和经验,最高600!
  • IP归属地查询API详解
  • Excel表格的35招必学秘技
  • SSP对DSP发出的Bid Request应该包含什么信息
  • 很色,非常色,十分色,格外色,异常色,特别色,相当色,太色了!
  • 操作系统Marking02源代码