model.json5配置权限

 {"name": 'ohos.permission.READ_MEDIA',"reason":"$string:permission_reason_IMG","usedScene": {}}

ui使用

  const url = albumClass.onRequestCameraPermission()


import { abilityAccessCtrl, common, PermissionRequestResult } from '@kit.AbilityKit';
import { hilog } from '@kit.PerformanceAnalysisKit';
import { BusinessError } from '@kit.BasicServicesKit';
import { promptAction } from '@kit.ArkUI';
import { photoAccessHelper } from '@kit.MediaLibraryKit';/*相机*/
class AlbumClass {atManager: abilityAccessCtrl.AtManager;context: common.UIAbilityContext;private hasRequestedOnce: boolean = false; // 是否已经请求过一次constructor(context?: common.UIAbilityContext) {this.context = context ?? (getContext(this) as common.UIAbilityContext);this.atManager = abilityAccessCtrl.createAtManager();}/*** 智能权限请求:第一次只弹窗,第二次跳转设置页* @returns Promise<boolean> true=已授权,false=未授权*/public async requestPermissionSmart(): Promise<boolean> {if (!this.hasRequestedOnce) {// 第一次点击,只弹系统权限弹窗const result = await this.requestPermission();if (!result) {// 用户拒绝,标记已请求过,但不执行任何操作this.hasRequestedOnce = true;return false;}return true;} else {// 第二次点击,跳转设置页return await this.requestPermissionInSettings();}}/*** 首次弹窗请求相机权限* @returns Promise<boolean> true=已授权,false=未授权*/public requestPermission(): Promise<boolean> {return this.atManager.requestPermissionsFromUser(this.context, ['ohos.permission.READ_MEDIA']).then((data: PermissionRequestResult) => {hilog.info(0x0000, 'PhotoClass', `data: ${JSON.stringify(data)}`);return data.authResults[0] === 0;}).catch((err: BusinessError) => {hilog.error(0x0000, 'PhotoClass', `data: ${JSON.stringify(err)}`);return false;});}/*** 跳转设置页请求相机权限* @returns Promise<boolean> true=已授权,false=未授权*/public requestPermissionInSettings(): Promise<boolean> {return this.atManager.requestPermissionOnSetting(this.context, ['ohos.permission.READ_MEDIA']).then((data: Array<abilityAccessCtrl.GrantStatus>) => {return data[0] === abilityAccessCtrl.GrantStatus.PERMISSION_GRANTED;}).catch((err: BusinessError) => {hilog.error(0x0000, 'PhotoClass', `data: ${JSON.stringify(err)}`);return false;});}/*** 重置状态(如果需要重新开始)*/public resetState(): void {this.hasRequestedOnce = false;}/*入口*/async onRequestCameraPermission() {const granted = await albumClass.requestPermissionSmart();if (granted) {let url = await this.updateAvatar();promptAction.showToast({ message: '相机权限已授权' });return url;} else {// 用户拒绝,不执行任何操作,等待用户再次点击promptAction.showToast({ message: '如需使用相机,请再次点击按钮' });return ""}}async updateAvatar() {// 1. 选择相册照片// 选择照片配置const photoSelectOptions = new photoAccessHelper.PhotoSelectOptions()photoSelectOptions.MIMEType = photoAccessHelper.PhotoViewMIMETypes.IMAGE_TYPEphotoSelectOptions.maxSelectNumber = 1// 选择照片对象const photoPicker = new photoAccessHelper.PhotoViewPicker()const photoResult = await photoPicker.select(photoSelectOptions)const uri = photoResult.photoUris[0]return uri}
}export const albumClass = new AlbumClass();

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/916904.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/916904.shtml
英文地址,请注明出处:http://en.pswp.cn/news/916904.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

智能车辆热管理测试方案——提升效能与保障安全

车辆热管理在能源危机出现、汽车排放法规日益严格以及人们对汽车舒适性要求更高的背景下应运而生。将各个系统或部件如冷却系统、润滑系统和空调系统等集成一个有效的热管理系统&#xff1b;控制和优化车辆的热量传递过程&#xff0c;保证各关键部件和系统良好运行&#xff1b;…

如何提升 TCP 传输数据的性能?详解

TCP 会保证每一个报文都能够抵达对方&#xff0c;它的机制是这样&#xff1a;报文发出去后&#xff0c;必须接收到对方返回的确认报文 ACK&#xff0c;如果迟迟未收到&#xff0c;就会超时重发该报文&#xff0c;直到收到对方的 ACK 为止 所以&#xff0c;TCP 报文发出去后&…

WiFi连接简单流程

WiFi连接流程与Debug方法一、WiFi连接全流程与详细日志解读 WiFi连接是一个多阶段、跨层次的复杂过程&#xff0c;涉及物理层、链路层、网络层和应用层的多种协议协作。整个流程包括AP初始化、终端扫描、认证、关联、四次握手、DHCP获取IP、网络可用与后续服务。1. AP初始化与参…

Python——Pandas库,超详细教程

前言1、Python的Pandas是一个基于Python构建的开源数据分析库&#xff0c;它提供了强大的数据结构和运算功能。2、Series&#xff1a;一维数组&#xff0c;类似于Numpy中的一维array&#xff0c;但具有索引标签&#xff0c;可以保存不同类型的数据&#xff0c;如字符串、布尔值…

go语言的gRPC教程-protobuf基础

一、前言 RPC&#xff0c;全称Remote Procedure Call&#xff0c;中文译为远程过程调用。通俗地讲&#xff0c;使用RPC进行通信&#xff0c;调用远程函数就像调用本地函数一样&#xff0c;RPC底层会做好数据的序列化与传输&#xff0c;从而能使我们更轻松地创建分布式应用和服…

Linux基本指令,对路径的认识

引言简单介绍一些Linux的基本指令&#xff0c;快速上手Linux操作系统。一、ls指令语法&#xff1a;ls [选项] [目录或文件]功能&#xff1a;&#xff1a;对于目录&#xff0c;该命令列出该目录下的所有子目录与文件。对于文件件&#xff0c;将列出文件名以及其他信息常用选项&a…

25. html 使用的字符集是什么,有什么特点

总结 utf-8&#xff0c;支持所有语言一、HTML 默认使用的字符集✅ HTML 页面推荐使用 UTF-8 字符集<meta charset"UTF-8" />这是 HTML5 中推荐的标准字符编码&#xff0c;用于定义网页中字符的编码方式。二、什么是字符集&#xff08;Character Encoding&#…

MySQL 读写分离(含示例代码)

背景 面对日益增加的系统访问量,数据库的吞吐量面临着巨大瓶颈。对于同一时刻有大量并发读操作和较少写操作类型的应用系统来说,将数据库拆分为主库和从库,主库负责处理事务性的增删改操作,从库负责处理查询操作,能够有效的避免由数据更新导致的行锁,使得整个系统的查询性…

C#中Visual Studio平台按照OfficeOpenXml步骤

找到包的地址&#xff1a; NuGet Gallery | DocumentFormat.OpenXml.Framework 3.3.0 https://nuget.info/packages 报错&#xff1a; 严重性 代码 说明 项目 文件 行 禁止显示状态 错误 无法解析依赖项“EPPlus”。使用的源: Officeopenxml, Mic…

【Linux】重生之从零开始学习运维之备份恢复

备份恢复准备工作16主机-ubuntu系统准备日志目录mkdir -p /data/mysql/logs/ chown mysql:mysql -R /data/mysql定制日志配置vim /etc/mysql/mariadb.conf.d/50-server.cnf log_bin/data/mysql/logs/binlog systemctl restart mariadb删除db1数据库drop database db1;13主机-ub…

VoIP技术全面深度学习指南:从原理到实践的认知进化

一、VoIP技术的本质认知与历史演进 1.1 技术本质的深层理解 VoIP&#xff08;Voice over Internet Protocol&#xff0c;IP语音传输&#xff09;从根本上代表了通信技术的范式转换。这不仅仅是将模拟语音信号数字化那么简单&#xff0c;而是将传统的电路交换模式彻底转向包交换…

CentOS Nginx 1.13.9 部署文档

以下是 Nginx 1.13.9 的详细安装步骤&#xff08;基于 CentOS/Ubuntu 系统&#xff09;&#xff1a;1. 安装依赖 CentOS/RHEL sudo yum install -y gcc pcre pcre-devel zlib zlib-devel openssl openssl-develUbuntu/Debian sudo apt update && sudo apt install -y b…

CSS-in-JS 动态主题切换与首屏渲染优化

动态主题切换的实现方式1. 使用 CSS 变量&#xff08;CSS Custom Properties&#xff09;CSS 变量是实现主题切换最直接的方式&#xff1a;:root {--primary-color: #4285f4;--background-color: #ffffff;--text-color: #333333; }[data-theme"dark"] {--primary-col…

不止 “听懂”,更能 “感知”!移远通信全新AI 音频模组 重新定义智能家居“听觉”逻辑

7月29日&#xff0c;在 2025 世界人工智能大会&#xff08;WAIC&#xff09;期间&#xff0c;移远通信正式发布全新 VA500-GL AI 音频模组。该产品基于本地化 AI 算法&#xff0c;为智能家电赋予精准 “听觉” 与主动交互能力&#xff0c;借助环境状态智能检测、离线语音控制及…

【Python】 切割图集的小脚本

Python 切割图片脚本 前言&#xff1a; 有短时间没写博客了&#xff0c;今天打算再写一篇MonoGame的教程&#xff0c;这篇是我再做我自己的2D 游戏项目的时候我需要一些已经切割好的图片但我得到图片是合在一起图集&#xff0c;这个脚本适合正在做2D游戏开发且不依赖于游戏引…

网络安全是什么?手把手教你认识网络安全

网络安全是什么&#xff1f;手把手教你认识网络安全 提到网络安全&#xff0c;不少人会联想到电影里黑客指尖翻飞攻破系统的炫酷场景。但实际上&#xff0c;它并非遥不可及的技术名词&#xff0c;而是与我们日常生活息息相关的 “数字保镖”。从手机支付密码到社交账号信息&am…

AtCoder Beginner Contest 416(2025.7.26)

文章目录A Vacation ValidationB 1D Akari&#xff08;补&#xff09;C Concat (X-th)&#xff08;补&#xff09;题目考查题意简述解法思路 &#xff1a;AC代码D Match, Mod, Minimize 2&#xff08;补&#xff09;题目分数/评级题目考查时间复杂度题意简述解法思路 &#xff…

基于 Hadoop 生态圈的数据仓库实践 —— OLAP 与数据可视化(五)

目录 五、Hue、Zeppelin 比较 1. Zeppelin 简介 2. Zeppelin 安装配置 &#xff08;1&#xff09;安装环境 &#xff08;2&#xff09;Zeppelin 及其相关组件 &#xff08;3&#xff09;配置 Zeppelin &#xff08;4&#xff09;启动 Zeppelin &#xff08;5&#xff0…

《消息队列学习指南:从 MQ 基础到 SpringAMQP 实践》

初识MQ 同步调用 目前我们采用的是基于OpenFeign的同步调用&#xff0c;也就是说业务执行流程是这样的&#xff1a; 支付服务需要先调用用户服务完成余额扣减 然后支付服务自己要更新支付流水单的状态 然后支付服务调用交易服务&#xff0c;更新业务订单状态为已支付 三个…

深度学习 --- 过拟合与欠拟合

深度学习 — 过拟合与欠拟合 文章目录深度学习 --- 过拟合与欠拟合一.概念1.1 过拟合1.2 欠拟合1.3 判断方式二&#xff0c;解决欠拟合三&#xff0c;解决过拟合3.1 L2正则化3.1.1 定义以及作用3.1.2 代码3.2 L1正则化3.3 L1与L2对比3.4 Dropout示例3.5 数据增强3.5.1 图片缩放…