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

鸿蒙中相册权限弹窗

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.dtcms.com/a/306614.html

相关文章:

  • 单片机电路基础
  • Prompt编写规范指引
  • 一种高维数据可视化的方法:Visualization and Mapping on Arcs (VMA)
  • MySQL的单行函数:
  • uniapp中的$vm
  • Winform 渐变色 调色板
  • 【AI论文】单一领域能否助力其他领域?一项基于数据的、通过强化学习实现多领域推理的研究
  • C#程序员计算器
  • Linux性能分析与内存调试:perf和Valgrind高级使用指南
  • 数据结构(7)单链表算法题OVA
  • Tlias 案例-整体布局(前端)
  • docker镜像加速及国内镜像源
  • cocos打包web - ios设备息屏及前后台切换音频播放问题
  • 美国人工智能行动计划:洞察 AI 发展新路径​​
  • 怎样在 Vue 中定义全局方法?
  • 快速删除Word和WPS文字中的空白行
  • LLM—— 基于 MCP 协议(SSE 模式)的工具调用实践
  • PYTHON从入门到实践-17通过网络API获取数据与可视化
  • Deforum Stable Diffusion,轻松实现AI视频生成自由!
  • Python爬虫04_Requests豆瓣电影爬取
  • 《消息队列学习指南:从 MQ 基础到 SpringAMQP 实践》
  • AI一周事件(2025年7月22日-7月29日)
  • wps批量让浮动在表格的图片跟随单元格移动和调整大小
  • 树莓派 香橙派SD卡TF卡U盘系统备份与还原
  • 【Kubernetes 指南】基础入门——Kubernetes 201(二)
  • 【昇腾】基于Atlas 200I DK A2开发者套件修改usb0的默认IP重启后被恢复的问题处理_20250730
  • 第十二天:C++ 标准库函数分类总结
  • LeetCode 56 - 合并区间
  • SpringBoot收尾+myBatis plus
  • 算法精讲:二分查找(二)—— 变形技巧