鸿蒙NEXT开发权限工具类(申请授权相关)(ArkTs)
import abilityAccessCtrl, { Permissions } from '@ohos.abilityAccessCtrl';
import { bundleManager, common, PermissionRequestResult } from '@kit.AbilityKit';
import { BusinessError } from '@ohos.base';
import { ToastUtil } from './ToastUtil';/*** 权限工具类(申请授权相关)* author: CSDN-鸿蒙布道师* since: 2025/04/22*/
export class PermissionUtil {/*** 获取应用上下文*/private static getContext(): common.UIAbilityContext {return getContext() as common.UIAbilityContext;}/*** 创建权限管理器实例*/private static createAtManager(): abilityAccessCtrl.AtManager {return abilityAccessCtrl.createAtManager();}/*** 校验当前是否已经授权* @param permission 待判断的权限* @returns 已授权 true,未授权 false*/static async checkPermissions(permission: Permissions): Promise<boolean> {const grantStatus = await PermissionUtil.checkAccessToken(permission);return grantStatus === abilityAccessCtrl.GrantStatus.PERMISSION_GRANTED;}/*** 校验并申请权限* @param permissions 需要授权的权限* @returns true 表示授权成功,false 表示用户拒绝授权*/static async checkAndRequestPermissions(permissions: Permissions | Array<Permissions>): Promise<boolean> {const isGranted = await PermissionUtil.checkPermissions(permissions as Permissions);if (isGranted) {return true;}return PermissionUtil.requestPermissionsEasy(permissions);}/*** 申请权限(支持单个或多个权限组合)* @param permissions 需要授权的权限* @returns true 表示授权成功,false 表示用户拒绝授权*/static async requestPermissions(permissions: Permissions | Array<Permissions>): Promise<boolean> {const atManager = PermissionUtil.createAtManager();const context = PermissionUtil.getContext();const permissionArray = Array.isArray(permissions) ? [...permissions] : [permissions];try {const result = await atManager.requestPermissionsFromUser(context, permissionArray);return PermissionUtil.isPermissionGranted(result);} catch (error) {PermissionUtil.handleError(error, '申请权限失败');return false;}}/*** 申请权限并提供二次授权机会(推荐使用此方法)* @param permissions 需要授权的权限* @returns true 表示授权成功,false 表示用户拒绝授权*/static async requestPermissionsEasy(permissions: Permissions | Array<Permissions>): Promise<boolean> {const granted = await PermissionUtil.requestPermissions(permissions);if (granted) {return true;}return PermissionUtil.requestPermissionOnSettingEasy(Array.isArray(permissions) ? [...permissions] : [permissions]);}/*** 二次向用户申请权限(适用于单个权限或读写权限组)* @param permissions 需要授权的权限集合* @returns true 表示授权成功,false 表示用户拒绝授权*/static async requestPermissionOnSetting(permissions: Permissions | Array<Permissions>): Promise<boolean> {const atManager = PermissionUtil.createAtManager();const context = PermissionUtil.getContext();const permissionArray = Array.isArray(permissions) ? [...permissions] : [permissions];try {const result = await atManager.requestPermissionOnSetting(context, permissionArray);return PermissionUtil.isPermissionGranted(result);} catch (error) {PermissionUtil.handleError(error, '二次申请权限失败');return false;}}/*** 二次向用户申请权限(适用于多个权限)* @param permissions 需要授权的权限集合* @returns true 表示授权成功,false 表示用户拒绝授权*/static async requestPermissionOnSettingEasy(permissions: Array<Permissions>): Promise<boolean> {for (const permission of permissions) {const isGranted = await PermissionUtil.checkPermissions(permission);if (!isGranted) {const granted = await PermissionUtil.requestPermissionOnSetting(permission);if (!granted) {return false;}}}return true;}/*** 检查权限是否已授予* @param data 授权结果* @returns true 表示所有权限均已授予,false 表示存在未授予权限*/private static isPermissionGranted(data: PermissionRequestResult | Array<number>): boolean {const authResults = Array.isArray(data) ? data : data.authResults;return authResults.every((status) => status === abilityAccessCtrl.GrantStatus.PERMISSION_GRANTED);}/*** 校验访问令牌是否已授权* @param permission 待检查权限* @returns 授权状态*/private static async checkAccessToken(permission: Permissions): Promise<abilityAccessCtrl.GrantStatus> {const atManager = PermissionUtil.createAtManager();let tokenId = 0;try {const bundleInfo = await bundleManager.getBundleInfoForSelf(bundleManager.BundleFlag.GET_BUNDLE_INFO_WITH_APPLICATION);tokenId = bundleInfo.appInfo.accessTokenId;} catch (error) {PermissionUtil.handleError(error, '获取应用信息失败');return abilityAccessCtrl.GrantStatus.PERMISSION_DENIED;}try {return await atManager.checkAccessToken(tokenId, permission);} catch (error) {PermissionUtil.handleError(error, '校验授权信息失败');return abilityAccessCtrl.GrantStatus.PERMISSION_DENIED;}}/*** 错误处理方法* @param error 错误对象(明确指定为 BusinessError 类型)* @param message 提示信息*/private static handleError(error: BusinessError, message: string): void {console.error(`${message}: ${error.message}`);ToastUtil.showToast(`${message}: ${error.message}`);}
}代码如下:
import abilityAccessCtrl, { Permissions } from '@ohos.abilityAccessCtrl';
import { bundleManager, common, PermissionRequestResult } from '@kit.AbilityKit';
import { BusinessError } from '@ohos.base';
import { ToastUtil } from './ToastUtil';/*** 权限工具类(申请授权相关)* author: CSDN-鸿蒙布道师* since: 2025/04/22*/
export class PermissionUtil {/*** 获取应用上下文*/private static getContext(): common.UIAbilityContext {return getContext() as common.UIAbilityContext;}/*** 创建权限管理器实例*/private static createAtManager(): abilityAccessCtrl.AtManager {return abilityAccessCtrl.createAtManager();}/*** 校验当前是否已经授权* @param permission 待判断的权限* @returns 已授权 true,未授权 false*/static async checkPermissions(permission: Permissions): Promise<boolean> {const grantStatus = await PermissionUtil.checkAccessToken(permission);return grantStatus === abilityAccessCtrl.GrantStatus.PERMISSION_GRANTED;}/*** 校验并申请权限* @param permissions 需要授权的权限* @returns true 表示授权成功,false 表示用户拒绝授权*/static async checkAndRequestPermissions(permissions: Permissions | Array<Permissions>): Promise<boolean> {const isGranted = await PermissionUtil.checkPermissions(permissions as Permissions);if (isGranted) {return true;}return PermissionUtil.requestPermissionsEasy(permissions);}/*** 申请权限(支持单个或多个权限组合)* @param permissions 需要授权的权限* @returns true 表示授权成功,false 表示用户拒绝授权*/static async requestPermissions(permissions: Permissions | Array<Permissions>): Promise<boolean> {const atManager = PermissionUtil.createAtManager();const context = PermissionUtil.getContext();const permissionArray = Array.isArray(permissions) ? [...permissions] : [permissions];try {const result = await atManager.requestPermissionsFromUser(context, permissionArray);return PermissionUtil.isPermissionGranted(result);} catch (error) {PermissionUtil.handleError(error, '申请权限失败');return false;}}/*** 申请权限并提供二次授权机会(推荐使用此方法)* @param permissions 需要授权的权限* @returns true 表示授权成功,false 表示用户拒绝授权*/static async requestPermissionsEasy(permissions: Permissions | Array<Permissions>): Promise<boolean> {const granted = await PermissionUtil.requestPermissions(permissions);if (granted) {return true;}return PermissionUtil.requestPermissionOnSettingEasy(Array.isArray(permissions) ? [...permissions] : [permissions]);}/*** 二次向用户申请权限(适用于单个权限或读写权限组)* @param permissions 需要授权的权限集合* @returns true 表示授权成功,false 表示用户拒绝授权*/static async requestPermissionOnSetting(permissions: Permissions | Array<Permissions>): Promise<boolean> {const atManager = PermissionUtil.createAtManager();const context = PermissionUtil.getContext();const permissionArray = Array.isArray(permissions) ? [...permissions] : [permissions];try {const result = await atManager.requestPermissionOnSetting(context, permissionArray);return PermissionUtil.isPermissionGranted(result);} catch (error) {PermissionUtil.handleError(error, '二次申请权限失败');return false;}}/*** 二次向用户申请权限(适用于多个权限)* @param permissions 需要授权的权限集合* @returns true 表示授权成功,false 表示用户拒绝授权*/static async requestPermissionOnSettingEasy(permissions: Array<Permissions>): Promise<boolean> {for (const permission of permissions) {const isGranted = await PermissionUtil.checkPermissions(permission);if (!isGranted) {const granted = await PermissionUtil.requestPermissionOnSetting(permission);if (!granted) {return false;}}}return true;}/*** 检查权限是否已授予* @param data 授权结果* @returns true 表示所有权限均已授予,false 表示存在未授予权限*/private static isPermissionGranted(data: PermissionRequestResult | Array<number>): boolean {const authResults = Array.isArray(data) ? data : data.authResults;return authResults.every((status) => status === abilityAccessCtrl.GrantStatus.PERMISSION_GRANTED);}/*** 校验访问令牌是否已授权* @param permission 待检查权限* @returns 授权状态*/private static async checkAccessToken(permission: Permissions): Promise<abilityAccessCtrl.GrantStatus> {const atManager = PermissionUtil.createAtManager();let tokenId = 0;try {const bundleInfo = await bundleManager.getBundleInfoForSelf(bundleManager.BundleFlag.GET_BUNDLE_INFO_WITH_APPLICATION);tokenId = bundleInfo.appInfo.accessTokenId;} catch (error) {PermissionUtil.handleError(error, '获取应用信息失败');return abilityAccessCtrl.GrantStatus.PERMISSION_DENIED;}try {return await atManager.checkAccessToken(tokenId, permission);} catch (error) {PermissionUtil.handleError(error, '校验授权信息失败');return abilityAccessCtrl.GrantStatus.PERMISSION_DENIED;}}/*** 错误处理方法* @param error 错误对象(明确指定为 BusinessError 类型)* @param message 提示信息*/private static handleError(error: BusinessError, message: string): void {console.error(`${message}: ${error.message}`);ToastUtil.showToast(`${message}: ${error.message}`);}
}
相关文章:
鸿蒙NEXT开发权限工具类(申请授权相关)(ArkTs)
import abilityAccessCtrl, { Permissions } from ohos.abilityAccessCtrl; import { bundleManager, common, PermissionRequestResult } from kit.AbilityKit; import { BusinessError } from ohos.base; import { ToastUtil } from ./ToastUtil;/*** 权限工具类(…...
1000 QPS 下 MySQL 性能瓶颈解决方案
当 MySQL 在 1000 QPS 时出现性能瓶颈,需从索引优化、查询逻辑调整、服务器配置调优、架构扩展等多维度综合解决,具体策略如下: 一、索引优化 补充缺失索引 通过慢查询日志定位高频低效 SQL,使用 EXPLAIN 分…...
【MySQL】MySQL 表的增删改查(CRUD)—— 下篇(内含聚合查询、group by和having子句、联合查询、插入查询结果)
目录 1. 插入查询结果 2 聚合查询 (行与行之间运算) count 计算查询结果的行数 sum 求和 avg 求平均值 max 最大值 min 最小值 【小结】 3. group by 子句 分组 where 条件 having 条件 4. 联合查询(多表查询) 内连接…...
简化K8S部署流程:通过Apisix实现蓝绿发布策略详解(上)
本次主题主要目的是为大家讲解蓝绿发布,但是发现文档和内容太长了,对此将文档拆分成了两部分,视频拆分成了好几部分,这样大家刷起来没疲劳感。 第一部分《apisix argorollout 实现蓝绿发布I-使用apisix发布应用》,主要…...
FLV 与 MP4 格式深度剖析:结构、原理
1 FLV格式分析 1.1 定义 FLV(Flash Video)是Adobe公司推出的⼀种流媒体格式,由于其封装后的⾳视频⽂件体积⼩、封装简单等特点,⾮常适合于互联⽹上使⽤。⽬前主流的视频⽹站基本都⽀持FLV。采⽤FLV格式封装的⽂件后缀为.flv FLV封装格式是由⼀个**⽂件…...
k8s的yaml文件里的volume跟volumeMount的区别
volume 是 Pod 级别的资源,用于定义存储卷。它是一个独立于容器的存储资源,可以被一个或多个容器共享使用。volume 的定义位于 Pod 的 spec.volumes 部分。 特点 独立性:volume 是 Pod 的一部分,而不是容器的一部分。它独立于容…...
Git常用操作命令
配置 Git git config --global user.name "Your Name": 设置用户名。git config --global user.email "your_emailexample.com": 设置用户邮箱。 初始化和克隆仓库 git init: 初始化一个新的 Git 仓库。git clone [URL]: 克隆一个远程仓库到本地。 git cl…...
09.传输层协议 ——— TCP协议
文章目录 TCP协议 谈谈可靠性TCP协议格式 序号与确认序号窗口大小六个标志位 确认应答机制(ACK)超时重传机制连接管理机制 三次握手四次挥手 流量控制滑动窗口拥塞控制延迟应答捎带应答面向字节流粘包问题TCP异常情况TCP小结基于TCP的应用层协议 TCP协…...
NineData 与飞书深度集成,企业级数据管理审批流程全面自动化
NineData 正式推出与飞书审批系统的深度集成功能,企业用户在 NineData 平台发起的审批工单,将自动推送至审批人的飞书中,审批人可以直接在飞书进行审批并通过/拒绝。该功能实现跨系统协作,带来巨大的审批效率提升,为各…...
WebRTC服务器Coturn服务器中的通信协议
1、概述 作为WebRTC服务器,coturn通信协议主要是STUN和TURN协议 STUN&TURN协议头部都是20个字节,用 Message Type来区分不同的协议 |------2------|------2------|------------4------------|------------------------12-------------------------|-----------…...
4.19除自身以外数组的乘积
我自己的思路,想用双指针, 一个从左边left开始乘,一个从右边right开始乘,如果left,或者right遇到了目标索引i(也就是我们要跨过去的当前元素),那么直接让对应的指针加一,当前元素不参与累积的计算ÿ…...
Anaconda3使用conda进行包管理
一、基础包管理操作 安装包 使用 conda install <包名> 安装指定包,支持多包批量安装和版本指定: conda install numpy # 安装单个包 conda install numpy scipy pandas # 批量安装多个包 conda install numpy1.21 # 指定版本 conda instal…...
媒体关注:联易融聚焦AI+业务,重塑供应链金融生态
近日,供应链金融科技龙头企业联易融科技集团(以下简称“联易融”)发布的公告显示,截至2024年末,公司现金储备达51亿元,同比上一年增加2亿元。公司称,公司经营性现金流保持健康,现金储…...
安装 Conda 环境
安装 Conda 环境:快速指南 什么是 Conda? Conda 是一个开源的跨平台包管理器和环境管理系统,支持 Python、R、Julia 等语言。它广泛用于数据科学和机器学习领域,能够轻松创建、管理和切换开发环境。 安装步骤 1. 安装 Anaconda…...
Qt Creator 创建 Qt Quick Application一些问题
一、Qt Creator 创建 Qt Quick Application 时无法选择 MSVC 编译器(即使已安装 Qt 5.15.2 和 MSVC2019) 1、打开 Qt Creator 的编译器设置 工具 (Tools) → 选项 (Options) → Kits → 编译器 (Compilers) 检查是否存在 Microsoft Visual C++ Compiler (x86_amd64) 或类似条…...
Spark-Streaming核心编程
以下是今天所学的知识点与代码测试: Spark-Streaming DStream实操 案例一:WordCount案例 需求:使用 netcat 工具向 9999 端口不断的发送数据,通过 SparkStreaming 读取端口数据并统计不同单词出现的次数 实验步骤:…...
深度剖析神经网络:从基础原理到面试要点(二)
引言 在人工智能蓬勃发展的今天,神经网络作为其核心技术之一,广泛应用于图像识别、自然语言处理、语音识别等众多领域。深入理解神经网络的数学模型和结构,对于掌握人工智能技术至关重要。本文将对神经网络的关键知识点进行详细解析…...
c#操作excel
说明 vs2022开发,调用excel 代码 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; using Sy…...
MQTTX + MCP:MQTT 客户端秒变物联网 Agent
引言:MQTTX 与 MCP 的融合 作为最受欢迎的 MQTT 客户端工具,MQTTX 在 1.12.0 beta 版本中集成了模型上下文协议(MCP)到 Copilot AI 功能中,显著提升了服务能力。这一融合让 MQTTX 转变为 MCP Host(也就是发…...
GSAP 动画引擎实战:打造丝滑动效交互组件库
目录 一、前言二、项目初始化三、核心动效组件实战1. 元素淡入组件:FadeIn.vue2. 列表级联动画:SlideList.vue3. 滚动触发 Reveal 动画:ScrollReveal.vue4. 拖拽盒子组件:DraggableBox.vue5. 打字机效果组件:Typewrite…...
[OpenGL] Lambertian材质漫反射BRDF方程的解释与推导
一、简介 本文简单的介绍了 Physical Based Rendering, PBR 中的 Lambertian 材质漫反射BRDF公式 f r l a m b e r t i a n c d i f f π fr_{lambertian}\frac{c_{diff}}{\pi} frlambertianπcdiff的推导。 二、漫反射项 根据 渲染方程: L o ( v ) ∫ …...
网易云音乐如何修改缓存地址到D盘
你可以通过创建 符号链接(Symbolic Link) 将网易云音乐的缓存目录转移到D盘,无需修改软件设置。以下是具体步骤: 操作步骤 关闭网易云音乐 确保程序完全退出(任务栏右下角无残留进程)。 备份并移动原缓存文…...
react使用01
React.cloneElement(element,props,…children) 这个是React的官方API,,主要用于克隆并修改React元素,, 本质: 复制一个已有的React元素,并允许你修改他的props element : 必须是一个有效的element元素p…...
yooAsset打包后材质丢失
以安卓为目标平台打出的AssetBundle包(尤其是YooAsset打出的),在Window下Unity编辑器以HostPlayMode运行,有时显示会丢失部分材质。 这是因为安卓目标的AssetBundle包适合OpenglES,而window下Unity编辑器模式是Dx11&a…...
Codeforces Round 1019 (Div. 2)
A. Common Multiple 找不同的数字 #include<iostream> #include<vector> #include<algorithm> using namespace std; int main() {int t; cin >> t;while (t--) {int n;cin >> n;vector<int> a(n);for (int i 0; i < n; i)cin >&…...
【Spring Boot】MyBatis多表查询的操作:注解和XML实现SQL语句
1.准备工作 1.1创建数据库 (1)创建数据库: CREATE DATABASE mybatis_test DEFAULT CHARACTER SET utf8mb4;(2)使用数据库 -- 使⽤数据数据 USE mybatis_test;1.2 创建用户表和实体类 创建用户表 -- 创建表[⽤⼾表…...
Docker离线安装与配置指南
Docker离线安装与配置指南 离线安装步骤 1. 下载离线安装包 官方下载地址: https://download.docker.com/linux/static/stable/x86_64/注意:国内用户若无法访问,可能需要使用科学上网工具。本文档以Docker 20.10.23版本为例。 2. 安装与部…...
N8N 官方 MCP 节点实战指南:AI 驱动下的多工具协同应用场景全解析
在低代码自动化领域,N8N 凭借其强大的节点扩展能力和灵活的工作流编排,成为企业构建复杂自动化流程的首选工具。随着 AI Agent 技术的兴起,通过 MCP(Multi-Tool Coordination Protocol)实现 AI 与外部工具的协同调用&a…...
v-html 显示富文本内容
返回数据格式: 只有图片名称 显示不出完整路径 解决方法:在接收数据后手动给img格式的拼接vite.config中的服务器地址 页面: <el-button click"">获取信息<el-button><!-- 弹出层 --> <el-dialog v-model&…...
UWB与GPS技术融合的室内外无缝定位方案
一、技术原理与互补性 双模定位机制 室外场景:GPS/北斗提供10-30厘米级定位精度(RTK技术辅助),覆盖露天区域。室内场景:UWB通过TOF/TDOA算法实现10-50厘米级定位精度,穿透金…...
AiEditor v1.3.8 发布
2025 年 4 月 22 日,AI 富文本编辑器 AiEditor 发布了 v1.3.8 版本。 AiEditor 是一个面向 AI 的下一代富文本编辑器,基于 Web Component 开发,支持 Layui、Vue、React、Angular 等几乎任何前端框架,适配 PC Web 端和手机端&#…...
从零学会epoll的使用和原理
从零学会epoll的使用和原理 第一步:理解 select / poll 的缺陷 一、select 和 poll 是什么? 它们是 Linux 提供的 I/O 多路复用机制,可以让我们同时监听多个文件描述符(fd),比如 socket,来等…...
XHTMLConverter把docx转换html报java.lang.NullPointerException异常
一.报错 1.报错信息 org.apache.poi.xwpf.converter.core.XWPFConverterException: java.lang.NullPointerExceptionat org.apache.poi.xwpf.converter.xhtml.XHTMLConverter.convert(XHTMLConverter.java:77)at org.apache.poi.xwpf.converter.xhtml.XHTMLConverter.doConve…...
教育科技质检的三重挑战 质检LIMS系统在教育技术研发的应用
在教育技术研发领域,实验室作为产品验证的核心环节,其质检效率与数据安全性直接关乎企业的创新竞争力。LIMS(实验室信息管理系统)作为贯穿检测全流程的数字化中枢,正在成为教育科技企业的"质量守护者"。本文…...
MySQL最左前缀原则深度解析:优化索引设计的核心法则
一、什么是最左前缀原则? 最左前缀原则(Leftmost Prefix Principle) 指在使用复合索引(Composite Index)时,MySQL会按照索引定义的列顺序,从左到右匹配查询条件。只有连续且从最左侧开始的列组…...
多模态大语言模型arxiv论文略读(三十五)
On the Out-Of-Distribution Generalization of Multimodal Large Language Models ➡️ 论文标题:On the Out-Of-Distribution Generalization of Multimodal Large Language Models ➡️ 论文作者:Xingxuan Zhang, Jiansheng Li, Wenjing Chu, Junjia…...
Linux 安装pm2并全局可用
前言 本文基于:操作系统 CentOS Stream 8 使用工具:Xshell8、Xftp8 服务器基础环境: node - 请查看 Linux安装node并全局可用 所需服务器基础环境,请根据提示进行下载、安装。 1.安装依赖 npm install pm2 -g2.配置全局软链…...
39.剖析无处不在的数据结构
数据结构是计算机中组织和存储数据的特定方式,它的目的是方便且高效地对数据进行访问和修改。数据结构表述了数据之间的关系,以及操作数据的一系列方法。数据又是程序的基本单元,因此无论是哪种语言、哪种领域,都离不开数据结构&a…...
基于 Vue 的Tiptap 富文本编辑器使用指南
目录 🧰 技术栈 📦 所需依赖 📁 文件结构 🧱 编辑器组件实现(components/Editor.vue) ✨ 常用操作指令 🧠 小贴士 🧩 Tiptap 扩展功能使用说明(含快捷键与命令&am…...
【音视频】AAC-ADTS分析
AAC-ADTS 格式分析 AAC⾳频格式:Advanced Audio Coding(⾼级⾳频解码),是⼀种由MPEG-4标准定义的有损⾳频压缩格式,由Fraunhofer发展,Dolby, Sony和AT&T是主 要的贡献者。 ADIF:Audio Data Interchange Format ⾳…...
vue中将elementUI和echarts转成pdf文件
若要将包含 ElementUI 组件数据和多个 ECharts 图表的数据转换为 PDF 文档,可结合 html2canvas、jspdf 以及 dom-to-image 来实现。其中,html2canvas 和 dom-to-image 可将 ECharts 图表转换为图片,jspdf 则用于生成 PDF 文档。对于 ElementU…...
基于 Electron、Vue3 和 TypeScript 的辅助创作工具全链路开发方案:涵盖画布系统到数据持久化的完整实现
基于 Electron、Vue3 和 TypeScript 的辅助创作工具全链路开发方案:涵盖画布系统到数据持久化的完整实现 引言 在数字内容创作领域,高效的辅助工具是连接创意与实现的关键桥梁。创作者需要一款集可视化画布、节点关系管理、数据持久化于一体的专业工具&…...
本地部署DeepSeek-R1模型接入PyCharm
以下是DeepSeek-R1本地部署及接入PyCharm的详细步骤指南,整合了视频内容及官方文档核心要点: 一、本地部署DeepSeek-R1模型 1. 安装Ollama框架 下载安装包 访问Ollama官网(https://ollama.com/download)或通过视频提供的百度云盘链接下载对应系统的安装包。Windows用户…...
基于LightGBM-TPE算法对交通事故严重程度的分析与可视化
基于LightGBM-TPE算法对交通事故严重程度的分析与可视化 原文: Analysis and visualization of accidents severity based on LightGBM-TPE 1. 引言部分 文章开篇强调了道路交通事故作为意外死亡的主要原因,引起了多学科领域的关注。分析事故严重性特…...
音视频小白系统入门课-3
本系列笔记为博主学习李超老师课程的课堂笔记,仅供参阅 往期课程笔记传送门: 音视频小白系统入门笔记-0音视频小白系统入门笔记-1音视频小白系统入门笔记-2 视频: 由一组图像组成:像素、分辨率、RGB 8888(24位) 、RGBA(32位)为…...
考研系列-计算机网络-第五章、传输层
一、传输层提供的服务 1.重点知识...
将Ubuntu系统中已有的Python环境迁移到Anaconda的虚拟环境中
需求:关于如何将Ubuntu系统中已有的Python环境迁移到Anaconda的虚拟环境test2里,而且他们提到用requirements.txt 安装一直报错,所以想尝试直接拷贝的方法。 可以尝试通过直接拷贝移植的方式迁移Python环境到Anaconda虚拟环境,但…...
AI 数字短视频数字人源码开发:多维赋能短视频生态革新
在短视频行业深度发展的进程中,AI 数字短视频数字人源码开发凭借其独特的技术优势,从多个维度为行业生态带来了革命性的变化,重塑短视频创作、传播与应用的格局。 数据驱动,实现内容精准化创作 AI 数字短视频数字人源码开发能够深…...
ffmpeg 硬解码相关知识
一:FFMPEG 支持的硬解方式:如下都是了解知识 DXVA2 - windows DXVA2 硬件加速技术解析 一、核心特性与适用场景 技术定义:DXVA2(DirectX Video Acceleration 2)是微软推出的基于 DirectX 的硬件加速标准…...
Ubuntu数据连接访问崩溃问题
目录 一、分析问题 1、崩溃问题本地调试gdb调试: 二、解决问题 1. 停止 MySQL 服务 2. 卸载 MySQL 相关包 3. 删除 MySQL 数据目录 4. 清理依赖和缓存 5.重新安装mysql数据库 6.创建程序需要的数据库 三、验证 1、动态库更新了 2、头文件更新了 3、重新…...