Android广播
文章目录
- 1.收发应用广播
- 1.标准广播
- 2.有序广播
- 3.广播的静态注册
- 2.监听系统广播
- 1.接受分钟到达广播
- 2.接受网络变更广播
- 3.定时管理器AlarmManager
- 3.捕捉屏幕的变更事件
- 1.竖屏和横屏切换
- 2.回到桌面与切换到任务列表
1.收发应用广播
1.标准广播
广播的收发过程分为三个步骤:
- 发送标准广播
- 定义广播接收器
- 开关广播接收器
public class BroadStandardActivity extends AppCompatActivity implements View.OnClickListener {private StandardReceiver standardReceiver;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_broad_standard);findViewById(R.id.btn_send_standard).setOnClickListener(this);}@Overridepublic void onClick(View view) {Intent intent = new Intent("com.zzzjian.demo7.standard");sendBroadcast(intent);}@Overrideprotected void onStart() {super.onStart();standardReceiver = new StandardReceiver();// 创建意图过滤器 只处理 com.zzzjian.demo7.action.standard 这个动作IntentFilter filter = new IntentFilter(StandardReceiver.STANDARD_ACTION);// 注册接收器 注册之后才能正常接受广播registerReceiver(standardReceiver, filter);}@Overrideprotected void onStop() {super.onStop();// 注销接收器 注销之后就不再接受广播unregisterReceiver(standardReceiver);}
}
public class StandardReceiver extends BroadcastReceiver {private static final String TAG = "StandardReceiver";public static final String STANDARD_ACTION = "com.zzzjian.demo7.standard";/*** 一旦收到标准广播,马上触发接收器的onReceive方法* @param context* @param intent*/@Overridepublic void onReceive(Context context, Intent intent) {if(intent != null && intent.getAction().equals(STANDARD_ACTION)){Log.d(TAG, "收到一个标准广播");}}
}
2.有序广播
- 一个广播存在多个接收器,这些接收器需要排队收听广播,这意味着该广播是条有序广播。
- 先收到广播的接收器,既可以让其他接收器继续收听广播,也可以中断广播不让其他接收器收听。
public class BroadOrderActivity extends AppCompatActivity implements View.OnClickListener {public static final String ORDER_ACTION = "com.zzzjian.demo7.order";private OrderAReceiver orderAReceiver;private OrderBReceiver orderBReceiver;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_broad_order);findViewById(R.id.btn_send_order).setOnClickListener(this);}@Overridepublic void onClick(View v) {Intent intent = new Intent(ORDER_ACTION);sendOrderedBroadcast(intent,null);}@Overrideprotected void onStart() {super.onStart();// 多个接收器处理有序广播的顺序规则// 1. 先处理优先级最高的接收器// 2. 优先级相同的接收器,先注册先处理orderAReceiver = new OrderAReceiver();IntentFilter filterA = new IntentFilter(ORDER_ACTION);filterA.setPriority(8);if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {registerReceiver(orderAReceiver, filterA, Context.RECEIVER_EXPORTED);}orderBReceiver = new OrderBReceiver();IntentFilter filterB = new IntentFilter(ORDER_ACTION);filterB.setPriority(10);if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {registerReceiver(orderBReceiver, filterB, Context.RECEIVER_EXPORTED);}}@Overrideprotected void onStop() {super.onStop();unregisterReceiver(orderAReceiver);unregisterReceiver(orderBReceiver);}
}
public class OrderAReceiver extends BroadcastReceiver {private static final String TAG = "OrderReceiver";@Overridepublic void onReceive(Context context, Intent intent) {if(intent != null && intent.getAction().equals(BroadOrderActivity.ORDER_ACTION)){Log.d(TAG, "收到一个有序广播A");}}
}
public class OrderBReceiver extends BroadcastReceiver {private static final String TAG = "OrderReceiver";@Overridepublic void onReceive(Context context, Intent intent) {if(intent != null && intent.getAction().equals(BroadOrderActivity.ORDER_ACTION)){Log.d(TAG, "收到一个有序广播B");// 中断广播abortBroadcast();}}
}
3.广播的静态注册
public class BroadStaticActivity extends AppCompatActivity implements View.OnClickListener {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_broad_static);findViewById(R.id.btn_send_shock).setOnClickListener(this);}@Overridepublic void onClick(View v) {// 8.0之后必须指定完整类名String fullName = "com.zzzjian.demo7.receiver.ShockReceiver";Intent intent = new Intent(ShockReceiver.SHOCK_ACTION);// 创建一个ComponentName对象,指定当前上下文和接收器全名ComponentName componentName = new ComponentName(this, fullName);intent.setComponent(componentName);sendBroadcast(intent);}
}
public class ShockReceiver extends BroadcastReceiver {public static final String SHOCK_ACTION = "com.zzzjian.demo7.shock";@Overridepublic void onReceive(Context context, Intent intent) {if(intent != null && intent.getAction().equals(SHOCK_ACTION)){Log.d("ShockReceiver", "震动");// 从系统服务获取震动管理器Vibrator vb = (Vibrator) context.getSystemService(Context.VIBRATOR_SERVICE);// 震动 500msvb.vibrate(500);}}
}
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"><uses-permission android:name="android.permission.VIBRATE"/><applicationandroid:allowBackup="true"android:icon="@mipmap/ic_launcher"android:label="@string/app_name"android:roundIcon="@mipmap/ic_launcher_round"android:supportsRtl="true"android:theme="@style/Theme.MyApplication"><receiverandroid:name=".receiver.ShockReceiver"android:enabled="true"android:exported="true"><intent-filter><action android:name="com.zzzjian.demo7.shock" /></intent-filter></receiver><activityandroid:name=".BroadStaticActivity"android:exported="true"><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity></application></manifest>
2.监听系统广播
1.接受分钟到达广播
- Intent.ACTION_TIME_TICK
public class SystemMinteActivity extends AppCompatActivity {private TimeReceiver timeReceiver;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_system_minte);}@Overrideprotected void onStart() {super.onStart();timeReceiver = new TimeReceiver();IntentFilter filter = new IntentFilter(Intent.ACTION_TIME_TICK);registerReceiver(timeReceiver,filter);}@Overrideprotected void onStop() {super.onStop();unregisterReceiver(timeReceiver);}
}
public class TimeReceiver extends BroadcastReceiver {private static final String TAG = "TimeReceiver";@Overridepublic void onReceive(Context context, Intent intent) {if(intent != null){Log.d(TAG,"收到一个分钟到达的广播");}}
}
2.接受网络变更广播
- android.net.conn.CONNECTIVITY_CHANGE
getType:获取网络类型
| 网络类型 | 说明 |
|---|---|
| TYPE_WIFI | 无线热点WIFI |
| TYPE_MOBILE | 数据连接 |
| TYPE_WIMAX | WiMAX |
| TYPE_ETHERNET | 以太网 |
| TYPE_BLUETOOTH | 蓝牙 |
| TYPE_VPN | 虚拟专用网络VPN |
getTypeName:获取网络类型名称
getSubtype:获取网络的子类型。如果为数据连接时,子类型为2G/3G/4G等细分。
3.定时管理器AlarmManager
Android提供了专门的定时管理器AlarmManager,它利用系统闹钟定时发送广播,常见方法有:
- set:设置一次性定时器。
- setAndAllowWhileIdle:设置一次性定时器,即使设备处于空闲状态,也会保证执行定时器。
- setRepeating:设置重复定时器,但系统不保证按时发送广播。
- cancel:取消延迟意图的定时器。
public class AlarmActivity extends AppCompatActivity implements View.OnClickListener {private AlarmReceiver alarmReceiver;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_alarm);findViewById(R.id.btn_alarm).setOnClickListener(this);}@Overridepublic void onClick(View v) {alarmReceiver.sendAlarm();}protected void onStart() {// 调用父类的onStart方法super.onStart();// 创建AlarmReceiver实例,并传入当前应用的上下文// 这里假设AlarmReceiver是一个自定义的BroadcastReceiver子类alarmReceiver = new AlarmReceiver(getApplicationContext());// 创建IntentFilter对象,用于过滤接收到的广播// 指定接收的广播动作为AlarmReceiver.ALARM_ACTIONIntentFilter filter = new IntentFilter(AlarmReceiver.ALARM_ACTION);// 检查Android SDK版本是否大于等于Oreo(8.0)// Android Oreo引入了一些新的API和行为变化if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {// 注册BroadcastReceiver// 参数分别为:要注册的BroadcastReceiver实例、IntentFilter对象、注册标志// Context.RECEIVER_EXPORTED表示此BroadcastReceiver可以被其他应用访问registerReceiver(alarmReceiver, filter, Context.RECEIVER_EXPORTED);}}@Overrideprotected void onStop() {super.onStop();unregisterReceiver(alarmReceiver);}
}
public class AlarmReceiver extends BroadcastReceiver {public static final String ALARM_ACTION = "com.zzzjian.demo7.alarm";private final Context mContext;public AlarmReceiver(Context context){super();this.mContext = context;}@Overridepublic void onReceive(Context context, Intent intent) {if(intent != null && intent.getAction().equals(ALARM_ACTION)){Log.d("AlarmReceiver","收到一个闹钟的广播");}}public void sendAlarm(){// 创建一个Intent对象,指定动作类型为ALARM_ACTIONIntent intent = new Intent(ALARM_ACTION);// 创建一个PendingIntent对象,用于稍后触发Intent// 第二个参数为请求码,在此设置为0;第三个参数为Intent对象;第四个参数为标志位,设置为FLAG_IMMUTABLE表示PendingIntent不可变PendingIntent pendingIntent = PendingIntent.getBroadcast(mContext, 0, intent, PendingIntent.FLAG_IMMUTABLE);// 获取系统服务AlarmManager,用于管理定时任务AlarmManager alarmManager = (AlarmManager) mContext.getSystemService(Context.ALARM_SERVICE);// 设置定时任务,当设备空闲时也可以唤醒设备执行任务// 参数分别为:AlarmManager设置类型、触发时间(从1970年1月1日00:00:00 GMT开始计算的毫秒数)、待执行的PendingIntent// 注释掉的代码为另一种设置方式,不支持设备空闲时唤醒// alarmManager.set(AlarmManager.RTC_WAKEUP, 1000, pendingIntent);if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M){alarmManager.setAndAllowWhileIdle(AlarmManager.RTC_WAKEUP, 1000, pendingIntent);}else{alarmManager.set(AlarmManager.RTC_WAKEUP, 1000, pendingIntent);}}}
3.捕捉屏幕的变更事件
1.竖屏和横屏切换
为了避免横竖屏切换时重新加载界面的情况,Android设计了一种配置变更机制,在指定的环境配置发生变更之时,无需重启活动页面,只需执行特定的变更行为。该机制分为两步:
- 修改AndroidManifest.xml,给activity节点增加android:configChange属性
- 修改活动页面的Java代码,重写活动的onCinfigurationChanged方法,补充对应的代码处理逻辑。
| onfigChanges属性的取值 | 说明 |
|---|---|
| orientation | 屏幕方向发生变化 |
| screenLayout | 屏幕的显示发生改变,例如在全屏和分屏之间切换 |
| screenSize | 屏幕大小发生改变,例如在竖屏和横屏之间切换 |
| keyboard | 键盘发生改变,例如使用了外部键盘 |
| keyboardHidden | 软键盘弹出或隐藏 |
| navigation | 导航方式发生改变,例如采用了轨迹球导航 |
| fontSize | 字体比例发生改变 |
| locale | 设备本地位置发生改变,例如切换了系统语言 |
| uiMode | 用户界面的模式发生改变,例如开启了夜间模式 |
<activityandroid:name=".ChangeDirectionActivity"android:exported="true"android:theme="@style/Theme.MyApplication"android:configChanges="orientation|screenLayout|screenSize"><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity>
public class ChangeDirectionActivity extends AppCompatActivity {private static final String TAG = "ChangeDirectionActivity";private TextView tv_monitor;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);EdgeToEdge.enable(this);setContentView(R.layout.activity_change_direction);tv_monitor = findViewById(R.id.tv_monitor);Log.d(TAG, "onCreate");}@Overridepublic void onConfigurationChanged(@NonNull Configuration newConfig) {super.onConfigurationChanged(newConfig);switch (newConfig.orientation){case Configuration.ORIENTATION_PORTRAIT:tv_monitor.setText("竖屏");break;case Configuration.ORIENTATION_LANDSCAPE:tv_monitor.setText("横屏");break;default:break;}}
}
2.回到桌面与切换到任务列表
- 按下主页键会回到桌面,按下任务键会打开任务列表,这两个操作并未提供相应的按键处理方法,而是通过广播发出事件信息。
- 如果想知道是否回到桌面,以及是否打开任务列表,均需收听系统广播Intent.ACTION_CLOSE_SYSTEM_DIALOGS。
- 从收到广播意图中获取原因reason字段,该字段值为homekey时表示回到桌面,值为recentapps时表示打开任务列表。
public class ReturnDesktopActivity extends AppCompatActivity {private DesktopReceiver desktopReceiver;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_return_desktop);desktopReceiver = new DesktopReceiver();IntentFilter filter = new IntentFilter(Intent.ACTION_CLOSE_SYSTEM_DIALOGS);if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {registerReceiver(desktopReceiver,filter, Context.RECEIVER_EXPORTED);}}@Overrideprotected void onDestroy() {super.onDestroy();unregisterReceiver(desktopReceiver);}@Overridepublic void onPictureInPictureModeChanged(boolean isInPictureInPictureMode) {super.onPictureInPictureModeChanged(isInPictureInPictureMode);if(isInPictureInPictureMode){Log.d("ReturnDesktopActivity", "进入小窗模式");}else{Log.d("ReturnDesktopActivity", "退出小窗模式");}}private class DesktopReceiver extends BroadcastReceiver{@Overridepublic void onReceive(Context context, Intent intent) {if(intent != null && intent.getAction().equals(Intent.ACTION_CLOSE_SYSTEM_DIALOGS)){String reason = intent.getStringExtra("reason");if(!TextUtils.isEmpty(reason) && (reason.equals("home") || reason.equals("recentapps"))){if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.O && !isInPictureInPictureMode()){PictureInPictureParams.Builder builder = new PictureInPictureParams.Builder();Rational aspectRatio = new Rational(10, 5);builder.setAspectRatio(aspectRatio);enterPictureInPictureMode(builder.build());}}}}}
}
<activityandroid:name=".ReturnDesktopActivity"android:configChanges="orientation|screenLayout|screenSize"android:exported="true"android:screenOrientation="portrait"android:supportsPictureInPicture="true"android:theme="@style/Theme.MyApplication"><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity>
相关文章:
Android广播
文章目录 1.收发应用广播1.标准广播2.有序广播3.广播的静态注册 2.监听系统广播1.接受分钟到达广播2.接受网络变更广播3.定时管理器AlarmManager 3.捕捉屏幕的变更事件1.竖屏和横屏切换2.回到桌面与切换到任务列表 1.收发应用广播 1.标准广播 广播的收发过程分为三个步骤&…...
Chapter 2 - 3. Understanding Congestion in Fibre Channel Fabrics
B2B Credit Counters Figure 2-3 shows the following counters on an FC port: 图 2-3 显示了 FC 端口上的以下计数器: 1. Rx B2B credits: The number of receive buffers of an FC port. This value does not change while the port is up. FC 端口的接收缓冲区数量。该值…...
014 属性分组
文章目录 后端AttrGroupEntity.javaCategoryEntity.javaAttrGroupController.javaCategoryServiceImpl.java 前端attrgroup-add-or-update.vue https://element.eleme.cn/#/zh-CN/component/cascader 后端 AttrGroupEntity.java package com.xd.cubemall.product.entity;impo…...
ElasticSearch备考 -- Alias
一、题目 1) Create the alias hamlet that maps both hamlet-1 and hamlet-2 Verify that the documents grouped by hamlet are 8 2) Configure hamlet-3 to be the write index of the hamlet alias 二、思考 可以通过指定别名,来指向一个或多个索引,…...
使用AI编码,这些安全风险你真的了解吗?
前言 随着AI技术的飞速发展与普及,企业开发人员对AI编码助手工具如Copilot的依赖度日益增强,使用AI编码助手工具虽然能显著提升编程效率与质量,但同时也存在一系列的潜在风险。 许多开发人员可能未意识到,如果他们的现有代码库中…...
计算机网络实验一:组建对等网络
实验一 组建对等网络 实验要求: 1. 组建对等网络,会在命令行使用ipconfig,两网络能够相互ping通,尝试netstat 命令 2. 建立局域网共享文件夹 3. 安装packet tracer,模拟组建对等网并测试对等网 1、组建对等网络 连…...
R语言绘制折线图
折线图是实用的数据可视化工具,通过连接数据点的线段展示数据随时间或变量的变化趋势。在经济、科学、销售及天气预报等领域广泛应用,为决策和分析提供依据。它能清晰呈现经济数据动态、助力科学研究、反映企业销售情况、预告天气变化,以简洁…...
基于组合模型的公交交通客流预测研究
摘 要 本研究致力于解决公交客流预测问题,旨在通过融合多种机器学习模型的强大能力,提升预测准确性,为城市公交系统的优化运营和交通管理提供科学依据。研究首先回顾了公交客流预测领域的相关文献,分析了传统统计方法在处理大规…...
docker环境redis启动失败
现象: 查看日志错误为 Bad file format reading the append only file: make a backup of your AOF file, then use ./redis-check-aof --fix <filename> 经查询为aof文件损坏导致,修复aof即可 解决方法: 1.查看执行的docker命令&…...
Pandas库详细学习要点
Pandas库是一个基于Python的数据分析库,它提供了丰富的数据结构和数据分析工具,非常适合数据科学和数据分析领域的工作。以下是Pandas库详细学习的一些要点: 1. 数据结构 - Series:一维带标签数组,类似于NumPy中的一…...
光路科技TSN交换机:驱动自动驾驶技术革新,保障高精度实时数据传输
自动驾驶技术正快速演进,对实时数据处理能力的需求激增。光路科技推出的TSN(时间敏感网络)交换机,在比亚迪最新车型中的成功应用,显著推动了这一领域的技术进步。 自动驾驶技术面临的挑战 自动驾驶系统需整合来自雷达…...
【含开题报告+文档+PPT+源码】基于SpringBoot的社区家政服务预约系统设计与实现【包运行成功】
开题报告 社区家政服务是满足居民日常生活需求的重要组成部分,在现代社会中发挥着越来越重要的作用。随着城市化进程的不断加速,社区家政服务需求量呈现持续增长的趋势。然而,传统的家政服务模式存在一些问题,如预约流程繁琐、信…...
2024最新【Pycharm】史上最全PyCharm安装教程,图文教程(超详细)
1. PyCharm下载安装 完整安装包下载(包含Python和Pycharm专业版注册码):点击这里 1)访问官网 https://www.jetbrains.com/pycharm/download/#sectionwindows 下载「社区版 Community」 安装包。 2)下载完成后&#…...
llama3 implemented from scratch 笔记
github地址:https://github.com/naklecha/llama3-from-scratch?tabreadme-ov-file 分词器的实现 from pathlib import Path import tiktoken from tiktoken.load import load_tiktoken_bpe import torch import json import matplotlib.pyplot as plttokenizer_p…...
照片在线转成二维码展示,更方便分享图片的好办法
怎么能把照片生成二维码后,分享给其他人展示呢?现在很多人为了能够更方便的将自己的图片展现给其他人会使用生成二维码的方式,将图片存储到云空间,通过扫码调取图片查看内容。与其他方式相比,这样会更加的方便…...
『网络游戏』登陆协议制定客户端发送账号密码CMD【19】
修改服务器脚本:ServerSession 修改服务器脚本:GameMsg 修改客户端脚本:ClientSession.cs 修改客户端脚本:NetSvc.cs 修改客户端脚本:WindowRoot.cs 修改客户端脚本:SystemRoot.cs 修改客户端脚本ÿ…...
独享动态IP是什么?它有什么独特优势吗?
在网络世界中,IP地址扮演着连接互联网的关键角色。随着互联网的发展,不同类型的IP地址也应运而生,其中独享动态ip作为一种新型IP地址,备受关注。本文将围绕它的定义及其独特优势展开探讨,以帮助读者更好地理解和利用这…...
gaussdb hccdp认证模拟题(单选)
1.在GaussDB逻辑架构中,由以下选项中的哪一个组件来负责提供集群日常运维、配置管理的管理接口、工具?(1 分) A. CN B. DN C. GTM D. OM --D 2.在以下命令中,使用以下哪一个选项中的命令可以以自定义归档形式导出表t1的定义…...
【斯坦福CS144】Lab1
一、实验目的 1.实现一个流重组器——一个将字节流的小块 (称为子串或段 )按正确顺序组装成连续的字节流的模块; 2.深入理解 TCP 协议的工作方式。 二、实验内容 编写一个名为"StreamReassembler"的数据结构,它负责…...
药箱里的药及其常见药的作用
药箱里有常备药,经常买药,但是忘了自己有什么药。容易之间弄混,以此作为更新存储的媒介。 1、阿莫西林胶囊 处方药 是指需要由医师或者医疗人员开局处方才能购买的药物(常见的OTC是非处方药的意思)。 截止时间 2024 10/10 药品资料汇总&am…...
LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明
LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造,完美适配AGV和无人叉车。同时,集成以太网与语音合成技术,为各类高级系统(如MES、调度系统、库位管理、立库等)提供高效便捷的语音交互体验。 L…...
Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以?
Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以? 在 Golang 的面试中,map 类型的使用是一个常见的考点,其中对 key 类型的合法性 是一道常被提及的基础却很容易被忽视的问题。本文将带你深入理解 Golang 中…...
【Java学习笔记】Arrays类
Arrays 类 1. 导入包:import java.util.Arrays 2. 常用方法一览表 方法描述Arrays.toString()返回数组的字符串形式Arrays.sort()排序(自然排序和定制排序)Arrays.binarySearch()通过二分搜索法进行查找(前提:数组是…...
c++ 面试题(1)-----深度优先搜索(DFS)实现
操作系统:ubuntu22.04 IDE:Visual Studio Code 编程语言:C11 题目描述 地上有一个 m 行 n 列的方格,从坐标 [0,0] 起始。一个机器人可以从某一格移动到上下左右四个格子,但不能进入行坐标和列坐标的数位之和大于 k 的格子。 例…...
【C++从零实现Json-Rpc框架】第六弹 —— 服务端模块划分
一、项目背景回顾 前五弹完成了Json-Rpc协议解析、请求处理、客户端调用等基础模块搭建。 本弹重点聚焦于服务端的模块划分与架构设计,提升代码结构的可维护性与扩展性。 二、服务端模块设计目标 高内聚低耦合:各模块职责清晰,便于独立开发…...
是否存在路径(FIFOBB算法)
题目描述 一个具有 n 个顶点e条边的无向图,该图顶点的编号依次为0到n-1且不存在顶点与自身相连的边。请使用FIFOBB算法编写程序,确定是否存在从顶点 source到顶点 destination的路径。 输入 第一行两个整数,分别表示n 和 e 的值(1…...
Mac下Android Studio扫描根目录卡死问题记录
环境信息 操作系统: macOS 15.5 (Apple M2芯片)Android Studio版本: Meerkat Feature Drop | 2024.3.2 Patch 1 (Build #AI-243.26053.27.2432.13536105, 2025年5月22日构建) 问题现象 在项目开发过程中,提示一个依赖外部头文件的cpp源文件需要同步,点…...
2023赣州旅游投资集团
单选题 1.“不登高山,不知天之高也;不临深溪,不知地之厚也。”这句话说明_____。 A、人的意识具有创造性 B、人的认识是独立于实践之外的 C、实践在认识过程中具有决定作用 D、人的一切知识都是从直接经验中获得的 参考答案: C 本题解…...
在web-view 加载的本地及远程HTML中调用uniapp的API及网页和vue页面是如何通讯的?
uni-app 中 Web-view 与 Vue 页面的通讯机制详解 一、Web-view 简介 Web-view 是 uni-app 提供的一个重要组件,用于在原生应用中加载 HTML 页面: 支持加载本地 HTML 文件支持加载远程 HTML 页面实现 Web 与原生的双向通讯可用于嵌入第三方网页或 H5 应…...
基于TurtleBot3在Gazebo地图实现机器人远程控制
1. TurtleBot3环境配置 # 下载TurtleBot3核心包 mkdir -p ~/catkin_ws/src cd ~/catkin_ws/src git clone -b noetic-devel https://github.com/ROBOTIS-GIT/turtlebot3.git git clone -b noetic https://github.com/ROBOTIS-GIT/turtlebot3_msgs.git git clone -b noetic-dev…...
