鸿蒙 Location Kit(位置服务)
移动终端设备已经深入人们日常生活的方方面面,如查看所在城市的天气、新闻轶事、出行打车、旅行导航、运动记录。这些习以为常的活动,都离不开定位用户终端设备的位置。
Location Kit
使用多种定位技术提供服务,可以准确地确定设备在室外/室内的位置:
- 坐标
系统以 1984 年世界大地坐标系统为参考,使用经度、纬度、海拔高度数据描述地球上的一个位置。 - GNSS 定位
全球导航卫星系统,包含:GPS、GLONASS、北斗、Galileo 等,通过导航卫星、设备芯片提供的定位算法,来确定设备准确位置。定位过程具体使用哪些定位系统,取决于用户设备的硬件能力。 - 基站定位
根据设备当前驻网基站和相邻基站的位置,估算设备当前位置。此定位方式的定位结果精度相对较低,并且需要设备可以访问蜂窝网络。 - WLAN、蓝牙定位
根据设备可搜索到的周围 WLAN、蓝牙设备位置,估算设备当前位置。此定位方式的定位结果精度依赖设备周围可见的固定 WLAN、蓝牙设备的分布,密度较高时,精度也相较于基站定位方式更高,同时也需要设备可以访问网络
申请定位权限
应用在使用 Location Kit 系统能力前,需要检查是否已经获取用户授权访问设备位置信息。如未获得授权,可以向用户申请需要的位置权限。系统提供的定位相关权限有:
ohos.permission.LOCATION
:用于获取精准位置,精准度在米级别ohos.permission.APPROXIMATELY_LOCATION
:用于获取模糊位置,精确度为 5 公里ohos.permission.LOCATION_IN_BACKGROUND
:用于应用切换到后台仍然需要获取定位信息的场景
当 APP 运行在前台,访问设备位置信息时,申请位置权限的方式有两种:
获取模糊位置:ohos.permission.APPROXIMATELY_LOCATION
获取精确位置:ohos.permission.APPROXIMATELY_LOCATION + ohos.permission.LOCATION
当 APP 运行在后台时,除了上述两组权限外,还需要申请如下权限:
后台定位权限:ohos.permission.LOCATION_IN_BACKGROUND
或者申请定位类型的长时任务:backgroundModes: "location"
申请用户权限
import {abilityAccessCtrl,bundleManager,common,Permissions,
} from "@kit.AbilityKit";let permissions: Permissions[] = ["ohos.permission.APPROXIMATELY_LOCATION","ohos.permission.LOCATION",
];let accessMgr = abilityAccessCtrl.createAtManager();
const flags = bundleManager.BundleFlag.GET_BUNDLE_INFO_WITH_APPLICATION;
const bundleInfo = await bundleManager.getBundleInfoForSelf(flags);
const grantStatus0 = await accessMgr.checkAccessToken(bundleInfo.appInfo.accessTokenId,permissions[0]
);
const grantStatus1 = await accessMgr.checkAccessToken(bundleInfo.appInfo.accessTokenId,permissions[1]
);if (grantStatus0 === abilityAccessCtrl.GrantStatus.PERMISSION_DENIED &&grantStatus1 === abilityAccessCtrl.GrantStatus.PERMISSION_DENIED
) {let results = await accessMgr.requestPermissionsFromUser(getContext(),permissions);if (results.authResults[0] == 0 && results.authResults[1] == 0) {// 通过授权} else {// 拒绝授权}
}
相关接口
接口名 | 功能描述 |
---|---|
on(type: 'locationChange', request: LocationRequest | ContinuousLocationRequest, callback: Callback<Location>): void | 开启位置变化订阅,并发起定位请求,持续性定位 |
off(type: 'locationChange', callback?: Callback<Location>): void | 关闭位置变化订阅,并删除对应的定位请求,如果不关闭就会产生内存泄漏 |
getCurrentLocation(request: CurrentLocationRequest | SingleLocationRequest, callback: AsyncCallback<Location>): void | 获取当前位置,使用 callback 回调异步返回结果,一次性定位 |
getCurrentLocation(request?: CurrentLocationRequest | SingleLocationRequest): Promise<Location> | 获取当前位置,使用 Promise 方式异步返回结果 |
getLastLocation(): Location | 获取最近一次定位结果 |
isLocationEnabled(): boolean | 判断位置服务是否已经开启 |
示例
{"module":{"extensionAbilities":["requestPermissions": [//当前应用申请数据和功能的访问权限//系统授予级权限 —— 只需要声明name即可{"name": "ohos.permission.INTERNET" //互联网访问权限},//用户授予级权限 —— 必须声明name/reason/usedScene三个属性{"name": "ohos.permission.APPROXIMATELY_LOCATION", //模糊定位"reason": "$string:Location_Reason","usedScene": {"abilities": ["EntryAbility"],"when": "always"}},{"name": "ohos.permission.LOCATION", //精确定位"reason": "$string:Location_Reason", //当前应用需要向用户解释使用该权限的原因"usedScene": { //权限在何种场景下被使用"abilities": ["EntryAbility"], //哪些Ability/窗口中需要使用该权限"when": "always" //何时使用该权限 inuse:当前应用在前台运行时需要使用 always:总是需要该权限,即使应用没在运行}}]]}
}
import { abilityAccessCtrl, bundleManager, Permissions } from '@kit.AbilityKit'
import { geoLocationManager } from '@kit.LocationKit'
import { JSON } from '@kit.ArkTS'
import { router } from '@kit.ArkUI'@Entry
@Component
struct Index {//页面显式时,先弹出“申请定位权限”授权窗口async onPageShow() {//① 声明需要用户授权的权限列表let list: Permissions[] = ['ohos.permission.APPROXIMATELY_LOCATION', 'ohos.permission.LOCATION']//② 获得当前应用的“访问令牌”let flags = bundleManager.BundleFlag.GET_BUNDLE_INFO_WITH_APPLICATION //需要获得整个应用的信息,而不是模块的/应用组件的let bundleInfo = await bundleManager.getBundleInfoForSelf(flags) //得到当前资源包信息let tokenId = bundleInfo.appInfo.accessTokenId //当前应用的当前分身在当前用户使用场景下,系统分配的令牌编号let atManager = abilityAccessCtrl.createAtManager() //At: Access Token,访问令牌,即当前应用的授权列表let grantStatus0 = await atManager.checkAccessToken(tokenId, list[0])let grantStatus1 = await atManager.checkAccessToken(tokenId, list[1])//③ 从访问令牌中查询,用户是否授予过定位权限if (grantStatus0 == -1 && grantStatus1 == -1) { //0表示已经通过授权了 -1表尚未尚未授权/之前拒绝授权了//④ 如果尚未授权过,则弹出申请授权对话框let result = await atManager.requestPermissionsFromUser(getContext(), list)if (result.authResults[0] == 0) {console.log('1.模糊定位权限已经从用户处申请到')} else {console.log('2.用户拒绝授予模糊定位权限')}if (result.authResults[1] == 0) {console.log('3.精确定位权限已经从用户处申请到')} else {console.log('4.用户拒绝授予精确定位权限')}}}//当页面隐藏时,取消“持续性定位改变监听”onPageHide() {try {geoLocationManager.off('locationChange')console.log('--持续性定位改变监听已经关闭')} catch (err) {console.log('--关闭持续性定位改变监听失败:', JSON.stringify(err))}}build() {Column({ space: 10 }) {Text('首页').fontSize(30)Button('1.获取用户当前的定位信息——一次性定位').onClick(async _ => {if (geoLocationManager.isLocationEnabled()) {console.log('--当前系统已打开定位开关,正在获取位置信息....')let loc = await geoLocationManager.getCurrentLocation()console.log('--成功获取到当前定位信息:', JSON.stringify(loc))if (geoLocationManager.isGeocoderAvailable()) {let address = await geoLocationManager.getAddressesFromLocation(loc)console.log('--当前系统可以进行地理<=>坐标转化',address[0].placeName)} else {console.log('--当前系统无法进行地理<=>坐标转化')}} else {console.log('--当前系统未启用定位服务,请用户打开定位开关!')}})Button('2.获取用户当前的定位信息——持续性定位').onClick(_ => {if (!geoLocationManager.isLocationEnabled()) {console.log('--当前系统没有打开定位开关!')return}let count = 0geoLocationManager.on('locationChange', {}, (loc) => {count++console.log('--当前设备位置改变了:', count, JSON.stringify(loc))})})Button('3.跳转到下一个页面,测试是否仍然监听定位改变').onClick(_ => {router.pushUrl({url: 'pages/Page1'})})}.height('100%').width('100%').padding(10)}
}
地理编码
使用坐标描述一个位置,非常准确,但是并不直观,面向用户表达并不友好。系统向开发者提供了以下两种转化能力:
- 地理编码转化:将地理描述转化为具体坐标。
- 逆地理编码转化:将坐标转化为地理描述。
其中地理编码包含多个属性来描述位置,包括国家、行政区划、街道、门牌号、地址描述等等,这样的信息更便于用户理解
import { geoLocationManager } from '@kit.LocationKit'try {if( geoLocationManager.isGeocoderAvailable() ){ //查询地理编码与逆地理编码服务是否可用let loc = {"latitude": 31.12, "longitude": 121.11, ... }let addr = await geoLocationManager.getAddressesFromLocation( loc ) //逆地理编码转化}
} catch (err) {console.error("逆地理编码转化失败:" + JSON.stringify(err));
}
相关文章:
鸿蒙 Location Kit(位置服务)
移动终端设备已经深入人们日常生活的方方面面,如查看所在城市的天气、新闻轶事、出行打车、旅行导航、运动记录。这些习以为常的活动,都离不开定位用户终端设备的位置。 Location Kit 使用多种定位技术提供服务,可以准确地确定设备在室外/室…...
人工智能、机器学习与深度学习:概念解析与内在联系
人工智能、机器学习与深度学习:概念解析与内在联系 一、人工智能(Artificial Intelligence, AI) (一)人工智能的定义 人工智能的定义随着技术发展不断演变。从广义上讲,人工智能是指通过计算机技术实现的…...
【Linux学习】Ubuntu对用户进行管理
目录 写在前面 【Linux学习】Ubuntu对用户进行管理一、为什么需要用户管理?二、用户管理基础操作(一)用户管理1. 用户管理命令表格2. 关键操作场景说明场景一:创建用户并配置权限场景二:修改用户属性场景三:…...
JVM 垃圾回收器
以下是对主流 JVM 垃圾回收器的详细解析,涵盖 一、Serial GC(单线程串行回收器) 二、Parallel GC(吞吐量优先回收器) 三、CMS(Concurrent Mark Sweep,低延迟回收器) 四、G1&…...
JUC入门(三)
7、Callable 1、可以有返回值 2、可以抛出异常 3、方法不同 run()/call() 代码测试 老版本的应用 package com.yw.callable;public class Old {public static void main(String[] args) {new Thread(new MyThread()).start();} }class MyThread implements Runnable{Overri…...
RV1126多线程获取SMARTP的GOP模式数据和普通GOP模式数据
通过代码的方式同时获取SMARTP模式的VENC码流数据和普通GOP模式的VENC码流数据,并进行对比画质。 一.RV1126 VI采集摄像头数据并同时编码SMARTP模式和普通GOP模式的编码码流流程 RV1126利用多线程同时获取普通GOP的VENC码流数据和SMARTP的码流数据一般如上图&#…...
MySQL事务、视图、索引、备份和恢复
1. 事务 如果不使用事务,那么如果出现了张三账户汇款成功-500元,但是李四那边的服务器出现了故障没有接收到500元,那么就会出现张三账户里有500元但是李四那边的账户还是1元的情况,转账的500元被吞了。 创建事务 2. 视图 创建视图…...
yolov8训练模型优化模型【误检】
针对 YOLOv8 模型在电动车人脸检测中出现误检行人人脸的问题,结合最新研究与实践经验,以下提供多维度优化方案及具体实施步骤: 一、数据集优化 数据清洗与标注增强 剔除干扰样本:确保训练集中所有标注仅包含骑行状态的人脸&#x…...
初识MySQL · 索引
目录 前言: 重温磁盘 认识索引 为什么这么做,怎么做 重谈page 聚簇索引VS非聚簇索引 回表查询 索引分类 前言: 前文我们主要是介绍了MySQL的一些基本操作,增删查改一类的操作都介绍了,并且因为大多数情况下&am…...
Kubernetes in action-配置和应用升级
Kubernetes的配置和应用升级 1、配置1.1 configMap1.2 secret1.3 Downward API1.4 Kubernetes API 2、服务升级2.1 升级方式2.1.1 先删除所有的旧版pod,使用新版本pod替换2.1.2 先创建新版pod,再删除旧版本pod2.1.3 滚动优化 2.2 使用deployment声明式升…...
十三、面向对象底层逻辑-Dubbo序列化Serialization接口
一、引言:分布式通信的数据桥梁 在分布式服务调用中,参数的跨网络传输需要将对象转化为二进制流,这一过程直接影响系统的性能、兼容性与安全性。Dubbo通过Serialization接口构建了可扩展的序列化体系,支持多种序列化协议的无缝切…...
5.19 打卡
DAY 30 模块和库的导入 知识点回顾: 导入官方库的三种手段导入自定义库/模块的方式导入库/模块的核心逻辑:找到根目录(python解释器的目录和终端的目录不一致) 作业:自己新建几个不同路径文件尝试下如何导入...
MathType公式如何按照(1)(2)…编号
在word中使用mathtype插入公式,发现插入的公式编号默认为(1.1),(1.2)…,但论文中常用的公式编号是(1)(2)…,分享一下如何实现(1.1)→(1)。 ①word菜单找到“MathType”,点击“插入编号”-“格式化”。 ②取消勾选“章编号”和“节…...
解决即使安装了pageoffice网页还是无法跳转、点击按钮没有反应等问题
出现的现象: 安装了pageoffice网页还是无法跳转、点击按钮没有反应 网页提示的错误: 点击按钮之前右键检查网页发现的错误: 点击无效按钮之后右键检查出现的错误: 原因: 鉴于安全性的考虑,新版浏览器不支…...
正点原子STM32新建工程
MDK 源自德国的 KEIL 公司,是 RealView MDK 的简称。 MDK5 由两个部分组成: MDK Core 和 Software Packs。 MDK Core 又分成四个部分: uVision IDE with Editor(编辑器), ARMC/C Compiler(编译…...
计算机网络 第三章:运输层(一)
运输层位于应用层和网络层之间,是分层的网络体系结构的重要部分。该层为运行在不同主机上的应用进程提供直接的通信服务。通常特别关注因特网协议,即 TCP 和 UDP 运输层协议。 讨论运输层和网络层的关析,为研究运输层第一个关键功能ÿ…...
机器学习(14)——模型调参
文章目录 一、动态调参方法论1. 调参策略选择2. 千万数据优化原则 二、模型调参策略对比1. LightGBM调参路线2. XGBoost调参路线3. 随机森林调参策略 三、代码实现示例通用数据准备(适用于所有模型)1. LightGBM调参示例2. XGBoost调参示例3. 随机森林调参…...
基于PetaLinux的Zynq PS应用自启动全攻略
一、嵌入式Linux启动管理的艺术 在工业机器人、智能摄像头、边缘计算网关等场景中,开机自启动管理是系统可靠性的第一道关卡。本文将深入讲解Zynq PS端在PetaLinux环境下实现: Systemd服务深度定制启动时序精准控制启动速度优化技巧动态服务管理创新方案二、环境搭建与工程配…...
贪心算法:多处最优服务次序、删数问题
多处最优服务次序问题 问题描述:设有n个顾客同时等待一项服务。顾客i需要的服务时间为ti(1≤i≤n),共有s处可以提供此项服务。应如何安排n个顾客的服务次序,才能使平均等待时间达到最小?平均等待时间是n个顾客等待服务时间的总和除以n。 算法设计:对于给定的n个顾…...
使用 Flask 框架实现FTP,允许用户通过 Web 界面浏览和下载文件夹中的所有文件
Flask 文件和文件夹下载服务实现 以下是一个基于 Flask 框架的简单 Web 服务,用于开放指定文件夹(./shared_files),允许用户通过浏览器浏览和下载文件夹中的所有文件和子文件夹。ZIP 和 TAR 文件将直接下载,而文件夹将…...
【Go】从0开始学习Go
文章目录 从0开始学习Go0 与C对比1 代码框架1.1 helloworld式代码示例1.2 主体代码元素(核心三部分)1.3 其他 2 与C/C区别3 有用的小工具4 注意事项 从0开始学习Go 0 与C对比 特性CGo编译型语言需要编译为机器码直接编译为二进制可执行文件静态类型类型…...
软件设计师SQL考点分析——求三连
一、考点分值占比与趋势分析 综合知识分值统计表(75分制) 年份考题数量分值分值占比考察重点2018334%关系代数、权限控制2019222.67%SQL注入、授权语句2020445.33%投影操作、权限回收2021334%视图操作、权限传递2022222.67%数据库安全、WITH GRANT OPT…...
使用tcs34725传感器和51单片机识别颜色
使用TCS34725颜色传感器和51单片机来识别颜色是一个非常有趣的项目。TCS34725是一种常用的RGB颜色传感器,能够测量红、绿、蓝光的强度,从而实现颜色识别。 1. 硬件连接 TCS34725传感器通过IC接口与51单片机连接。以下是连接方式: SDA&…...
数据库-oracle-包-视图传参
并发下可能不准确 -- 修改包规范 CREATE OR REPLACE PACKAGE sczz.p_view_param IS function set_n(n varchar2) return varchar2; function get_n return varchar2; function set_ny(ny varchar2) return varchar2; function get_ny return varchar2; …...
深入探讨Java中的上下文传递与ThreadLocal的局限性及Scoped Values的兴起
在Java开发中,特别是在依赖框架的应用程序中,上下文数据的管理是一个常见但具有挑战性的问题。上下文数据可能包括元数据、配置信息或其他需要在代码不同部分之间共享的信息。传统的做法是通过方法参数显式传递这些上下文,但这种方法会导致代码复杂、难以维护,尤其是在大型…...
Spring boot 学习笔记2
Maven 项目管理工具:Maven 通过 pom.xml(Project Object Model)文件描述项目配置,包括依赖、构建流程、插件等,实现项目标准化管理 依赖管理:自动下载并管理项目所需的第三方库(如 Spring、MyB…...
“保证医疗器械信息来源合法 真实、安全的保障措施、情况说明及相关证明”模板
保证医疗器械信息来源合法真实、安全的保障措施、情况说明及相关证明 一、医疗器械信息来源合法、真实、安全的管理措施 目前我公司网站所展示的医疗器械是企业代理品种,是取得合法注册资格的产品,拥有合法证明文件的产品。本网站仅展示本公司行政许可…...
Feature Toggle 不再乱:如何设计一个干净、安全、可控的特性开关系统?
网罗开发 (小红书、快手、视频号同名) 大家好,我是 展菲,目前在上市企业从事人工智能项目研发管理工作,平时热衷于分享各种编程领域的软硬技能知识以及前沿技术,包括iOS、前端、Harmony OS、Java、Python等…...
不锈钢保温容器行业2025数据分析报告
不锈钢保温容器市场概况 2024年全球不锈钢保温容器市场规模约为453.3亿元,预计到2031年将增长至608.3亿元,年均复合增长率(CAGR)为4.3%。这一增长主要得益于全球范围内对保温容器需求的持续增加,尤其是在户外活动、餐…...
leetcode239 滑动窗口最大值deque方式
这段文字描述的是使用单调队列(Monotonic Queue) 解决滑动窗口最大值问题的优化算法。我来简单解释一下: 核心思路 问题分析:在滑动窗口中,若存在两个下标 i < j 且 nums[i] ≤ nums[j],则 nums[i] 永远…...
腾讯云怎么在游戏云中助力
腾讯云游戏云:依托深厚游戏基因,打造高质量全方位生态平台 在竞争激烈的云计算市场中,腾讯云凭借其得天独厚的游戏生态资源和深耕多年的技术沉淀,正成为游戏行业不可忽视的重要力量。腾讯不仅是全球领先的游戏开发和发行商&#…...
深入理解pip:Python包管理的核心工具与实战指南
# 深入理解pip:Python包管理的核心工具与实战指南 在Python开发中,第三方库是提升效率的关键。而pip作为Python官方的包管理工具,承担着安装、卸载、升级和管理库的重要职责。本文将全面解析pip的核心命令,结合实例演示用法&#…...
【python】windows修改 pip 默认安装路径
在 Windows 系统 下,希望修改 pip 默认安装路径,结合你前面贴的图片和信息,一个 推荐做法(不修改 site.py)的完整教程。 目标:让 pip 安装包默认装到你指定的路径(如 D:\MyPythonLibsÿ…...
Python函数——万字详解
—— 小 峰 编 程 导 语: 从今天开始,我们将进入第二模块的学习——函数。第一模块主要是学习python基础知识,从第二模块开始就可以通过程序去解决工作中实际的问题。从今天开始,我们将进入第二模块的学习,此模块…...
es在已有历史数据的文档新增加字段操作
新增字段设置默认值 场景 在已经有大量数据的索引文档上,增加新字段 技术实现 一.更新索引映射 通过PUT请求显式定义新字段类型,确保后续写入的文档能被正确解析 PUT /文档名/_mapping {"properties": {"字段名1": {"type…...
LeetCode 35 搜索插入位置题解
LeetCode 35 搜索插入位置题解 题目描述 题目链接 给定一个排序数组和一个目标值,在数组中找到目标值并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置(需保证数组仍然有序)。要求时间复杂度为 O(log n)。…...
RabbitMQ通信模式(Simplest)Python示例
RabbitMQ通信模式-Python示例 0.RabbitMQ官网通信模式1.Simplest(简单)模式1.1 发送端1.2 接收端 0.RabbitMQ官网通信模式 1.Simplest(简单)模式 1.1 发送端 # -*- coding: utf-8 -*- """ Author: xxx date: 2025/5/19 11:30 Description: Simaple简单模…...
游戏开发实战(一):Python复刻「崩坏星穹铁道」嗷呜嗷呜事务所---源码级解析该小游戏背后的算法与设计模式【纯原创】
文章目录 奇美拉项目游戏规则奇美拉(Chimeras)档案领队成员 结果展示: 奇美拉项目 由于项目工程较大,并且我打算把我的思考过程和实现过程中踩过的坑都分享一下,因此会分3-4篇博文详细讲解本项目。本文首先介绍下游戏规则并给出奇美拉档案。…...
力扣热题100之删除链表的倒数第N个节点
题目 给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。 代码 方法一 将链表中的值放入列表中,然后删除倒数第n个值,再将剩下的数依次转化为链表 # Definition for singly-linked list. # class ListNode: # …...
OCframework编译Swift
建一个OC的framework: 需要对外暴露的OC文件,需要放到OC的.h文件中 framework中,OC类,调用framework中的Swift类: #import "WowAudioFocus/WowAudioFocus-Swift.h" //02 #import "{工程名}/{工程…...
【AI News | 20250519】每日AI进展
AI Repos 1、deepdrone DeepDrone是一款基于smolagents框架的无人机聊天代理,集成DroneKit实现无人机分析与操作。用户可通过自然语言聊天与无人机助手交互,实现飞行路径和传感器数据可视化、基于飞行时长的维护建议、任务规划以及真实的无人机控制&…...
分布式ID生成系统
代码地址: github mid 简介 分布式 ID 生成系统是一个高性能、可靠的 ID 生成服务,支持两种模式:Snowflake(基于时间戳的内存生成)和 Segment(基于 MySQL 的号段分配)。系统采用双 Buffer 策略优化性能,集成 Prometheus 监控和 Zap 结构化日志,确保高可用性和可观测性…...
MAC常用操作整理
音量方法: 电脑键盘的右上角就有静音和不静音的按钮,还有调节音量的按钮,调节屏幕亮度的按钮 切换输入法方法: 1.大写按键,2.function按键(fn), 3.control 空格键, 选择上一个输入法,4.controloption空格…...
【Canvas与图标】圆角方块蓝星CSS图标
【成图】 120*120的png图标 大小图: 【代码】 <!DOCTYPE html> <html lang"utf-8"> <meta http-equiv"Content-Type" content"text/html; charsetutf-8"/> <head><title>圆角方块蓝星CSS Draft1</…...
易境通散货拼柜系统:提高货代企业货物配载效率
在国际物流代理运输领域,货物配载是整个供应链的核心环节,其优化对于提升整个供应链的效率至关重要。传统的配载管理方式往往依赖人工操作,不仅效率低下,还容易出现错误。面对多订单、多货主、多目的地的复杂场景,传统…...
[Spring Boot]整合Java Mail实现Outlook发送邮件
日常开发过程中,我们经常需要使用到邮件发送任务,比方说验证码的发送、日常信息的通知等。日常比较常用的邮件发送方包括:163、QQ等,本文主要讲解Outlook SMTP的开启方式、OutLook STARTTTL的配置、如何通过JavaMail来实现电子邮件的发送等。 Outlook作为微软提供的企业电子…...
【盈达科技】GEO优化实战策略
提升内容在生成式引擎中的可见性:实战策略 随着生成式引擎(Generative Engines, GEs)的兴起,内容创作者面临着新的挑战和机遇。这些引擎通过整合和总结多源信息来提供精准且个性化的回答,正在迅速取代传统搜索引擎。为…...
HTTP 协议基础
本篇文章会从如下角度介绍 HTTP 协议: 原理与工作机制请求方法与状态码Header 与 Body 1、原理与工作机制 1.1 HTTP 是什么 HyperText Transfer Protocol,超文本传输协议,"超"表示扩展而非超级,即可以链接到其他文本…...
ros运行包,Ubuntu20.04成功运行LIO-SAM
zz:~/lio_sam_ws$ source devel/setup.bash zz:~/lio_sam_ws$ roslaunch lio_sam run.launch 创建包链接: 链接1:Ubuntu20.04成功运行LIO-SAM_ubuntu20.04运行liosam-CSDN博客 链接2:ubuntu 20.04 ROS 编译和运行 lio-sam,并且导出PCD文件…...
Linux《自主Shell命令行解释器》
在上一篇的进程控制当中我们已经了解了进程退出、进程等待以及进程替换的相关概念,那么在了解了这些的概念之后接下来在本篇当中我们就可以结合之前我们学习的知识来实现一个自主的Shell命令行解释器,通过Shell的实现能让我们进一步的理解操作系统当中的…...