Loading [MathJax]/jax/input/TeX/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >HarmonyOS 开发实践——基于webview的Picker拉起

HarmonyOS 开发实践——基于webview的Picker拉起

原创
作者头像
小帅聊鸿蒙
发布于 2024-11-14 09:15:55
发布于 2024-11-14 09:15:55
1500
举报
文章被收录于专栏:鸿蒙开发笔记鸿蒙开发笔记

场景描述

在webview中拉起文件管理器,图库以及相机。

  • 场景一:在web页面实现文件和图片上传。
  • 场景二:在web页面拉起摄像头,实现拍照上传

方案描述

场景一

本地h5页面内picker拉起

效果图

在web页面实现picker拉起文件管理器。

在web页面实现picker拉起图库。

方案

调用web的onShowFileSelector事件响应用户在h5侧写入的“选择文件”按钮,并使用文件选择器对象DocumentViewPicker的select方法,通过选择模式拉起documentPicker界面选择文件。

代码语言:ts
AI代码解释
复制
Image(this.uris[0]).width(100).height(100)
//用来展示选择的图片
Image(this.uris[1]).width(100).height(100)
Web({ src: $rawfile('TestonShowFileSelector.html'), controller: this.controller })
  .javaScriptAccess(true)
  .domStorageAccess(true)
  .onShowFileSelector((event) => {
    console.log('MyFileUploader onShowFileSelector invoked')
    const documentSelectOptions = new picker.DocumentSelectOptions();
    // 选择媒体文件的最大数目
    documentSelectOptions.maxSelectNumber = 2;
    let uris: Array<string> = [];
    const documentViewPicker = new picker.DocumentViewPicker();
    documentViewPicker.select(documentSelectOptions).then((DocumentSelectResult: Array<string>) => {
      this.uris[0] = DocumentSelectResult[0];
      console.info('photoViewPicker.select to file succeed and uris are:' + this.uris);
    }).catch((err: BusinessError) => {
      console.error(`Invoke photoViewPicker.select failed, code is ${err.code}, message is ${err.message}`);
    })

调用web的onShowFileSelector事件响应用户在h5侧写入的“选择文件”按钮,并使用图库选择器对象PhotoViewPicker的select方法,通过选择模式拉起photoPicker界面选择图片。

代码语言:ts
AI代码解释
复制
Web({ src: $rawfile('i.html'), controller: this.controller })
  .javaScriptAccess(true)
  .domStorageAccess(true)
  .onShowFileSelector((event) => {
    console.log('MyFileUploader onShowFileSelector invoked')
    const photoSelectOptions = new picker.PhotoSelectOptions();
    // 过滤选择媒体文件类型为IMAGE_VIDEO_TYPE
    photoSelectOptions.MIMEType = picker.PhotoViewMIMETypes.IMAGE_VIDEO_TYPE;
    // 选择媒体文件的最大数目
    photoSelectOptions.maxSelectNumber = 2;
    let uris: Array<string> = [];
    const photoViewPicker = new picker.PhotoViewPicker();
    photoViewPicker.select(photoSelectOptions).then((photoSelectResult: picker.PhotoSelectResult) => {
      this.uris = photoSelectResult.photoUris;
      console.info('photoViewPicker.select to file succeed and uris are:' + this.uris);
    }).catch((err: BusinessError) => {
      console.error(`Invoke photoViewPicker.select failed, code is ${err.code}, message is ${err.message}`);
    })
    return false
  })

场景二

在web页面拉起摄像头,实现拍照上传

效果图

方案

调用web的onShowFileSelector事件响应用户在h5侧写入的“选择文件”按钮,先通过getContext接口获取Context上下文,返回的Context类型为UIAbilityContext。然后调用 startAbilityForResult启动一个Ability,在其want参数中表明要启动的应用信息以及对应的pid。

代码语言:ts
AI代码解释
复制
const context = getContext(this) as common.UIAbilityContext
context.startAbilityForResult({
  action:"ohos.want.action.imageCapture",
  parameters:{
    callBundleName:"com.hm.imageshow"
  }
}).then((res)=>{
  console.log("testTag - " +JSON.stringify(res));
  let str:string = res.want?.parameters!["resourceUri"] as string
  console.log("str"+str);//file://media/Photo/11/IMG_1713942933_005/IMG_20240424_151353.jpg
  let fd = fs.openSync(str).fd
  this.uris[0] = str
  let arr:ArrayBuffer = new ArrayBuffer(128)
  fs.readSync(fd,arr)
  console.log("testTag - " + str);
})

以上两种场景的h5页面可以通用,都可以用一个上传文件的input框来拉起。

代码语言:html
AI代码解释
复制
<!DOCTYPE html>
  <html>
  <head>
  <meta name="viewport" content="width=device-width, initial-scale=1.0" charset="utf-8">
  </head>
  <body>
  <form id="upload-form" enctype="multipart/form-data">
  <input type="file" id="upload" name="upload"/>
  </form>
  </body>
  </html>

写在最后

如果你觉得这篇内容对你还蛮有帮助,我想邀请你帮我三个小忙:

  • 点赞,转发,有你们的 『点赞和评论』,才是我创造的动力;
  • 关注小编,同时可以期待后续文章ing🚀,不定期分享原创知识;
  • 想要获取更多完整鸿蒙最新学习知识点,可关注B站:码牛课堂鸿蒙开发;

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【愚公系列】2023年12月 HarmonyOS教学课程 027-ArkUI组件(Image)
在HarmonyOS中,Image组件是用于显示图像文件的UI组件。它可以显示本地图像文件或远程URL地址的图像文件。Image组件的实现方式比较简单,只需提供图像文件路径或URL地址即可。
愚公搬代码
2025/06/02
920
【愚公系列】2023年12月 HarmonyOS教学课程 027-ArkUI组件(Image)
【拥抱鸿蒙】HarmonyOS NEXT实现双路预览并识别文字
> 我们在许多其他平台看到过OCR功能的应用,那么HarmonyOS在这方面的支持如何呢?我们如何能快速使用这一能力呢?使用这一能力需要注意的点有哪些呢?就让我们一起来探究吧~
郑知鱼
2025/06/03
570
【拥抱鸿蒙】HarmonyOS NEXT实现双路预览并识别文字
纯血鸿蒙APP实战开发——图片选择和下载保存案例
本示例介绍图片相关场景的使用:包含访问手机相册图片、选择预览图片并显示选择的图片到当前页面,下载并保存网络图片到手机相册或到指定用户目录两个场景。
小帅聊鸿蒙
2025/02/06
1770
纯血鸿蒙APP实战开发——图片选择和下载保存案例
HarmonyOS 开发实践 —— 基于Picker的受限权限适配方案
Picker由系统独立进程实现,应用可以通过拉起Picker组件,用户在Picker上选择对应的资源(如图片、文档等),应用可以获取Picker返回的结果。
小帅聊鸿蒙
2024/12/06
2460
HarmonyOS 开发实践 —— 网络重定向在HarmonyOS上的场景及解决方案
在应用开发时会碰到页面自动跳转的重定向现象,根据业务需求,需要对重定向进行一些判断和处理。
小帅聊鸿蒙
2024/12/16
2130
HarmonyOS 开发实践 —— 网络重定向在HarmonyOS上的场景及解决方案
【HarmonyOS 5】鸿蒙应用隐私保护详解
在今天这个手机不离手的时代,我们每天用手机支付、聊天、记录生活,不知不觉中,大量个人信息都存储在了移动设备里。但你有没有想过,如果这些隐私数据泄露了会怎样?从接到诈骗电话,到遭遇身份盗用,后果可能不堪设想。好在,HarmonyOS早就为我们的隐私安全做好了全方位的防护。
GeorgeGcs
2025/05/06
2090
【HarmonyOS 5】鸿蒙应用隐私保护详解
HarmonyOS 开发实践 —— H5通过url scheme拉起对应应用
三方应用使用过程中,可能会在应用或浏览器的H5页面中需要跳转到其它应用,本文档提供了H5跳转页面的方法
小帅聊鸿蒙
2024/11/29
3890
HarmonyOS 开发实践——基于PhotoViewPicker对图片进行操作
用户有时需要分享或保存图片、视频等用户文件,开发者可以通过系统预置的 文件选择器(FilePicker) ,实现该能力。通过Picker访问相关文件,将拉起对应的应用,引导用户完成界面操作,接口本身无需申请权限。 PhotoViewPicker :适用于图片或视频类型文件的选择与保存。优选使用 PhotoAccessHelper的PhotoViewPicker 来选择文件。当前PhotoViewPicker对接的选择资源来自于图库,保存位置为系统文件管理器的特定目录,因此使用save接口保存的图片或视频无法在图库中展示。如需在图库中展示,请使用 安全控件创建媒体资源 。
小帅聊鸿蒙
2024/11/06
3030
HarmonyOS 开发实践——基于PhotoViewPicker对图片进行操作
鸿蒙NEXT版仿微信聊天App的选择相册图片
上一节我们利用鸿蒙自带的JSON库实现了封装和解析JSON串,那么接下来准备把图片数据采用JSON格式封装。不过在此之前,得先从系统相册挑选一张待发送的图片才行,正所谓要先有鸡而后才有蛋呀。
aqi00
2024/11/25
1690
鸿蒙NEXT版仿微信聊天App的选择相册图片
鸿蒙开发实现图片上传(上传用户头像)
开发者可以通过系统预置的文件选择器(FilePicker),实现该能力。通过Picker访问相关文件,将拉起对应的应用,引导用户完成界面操作,接口本身无需申请权限。
用户11666353
2025/05/19
1600
HarmonyOS 开发实践——基于原生能力的跨应用跳转
使用原生能力startability启动其他应用前,开发者需要判断目标应用是否安装,从而执行不同的逻辑,例如:
小帅聊鸿蒙
2024/11/08
2400
HarmonyOS 开发实践——基于原生能力的跨应用跳转
【HarmonyOS学习】用户文件访问
分为文档类Uri和媒体文件Uri两类,需要是normal等级的应用(默认的应用是这个)调用这两个类,要不然会报没有权限的错误,官方配图如下:
钟子翔
2024/12/24
2020
HarmonyOS 开发实践——基于AVCodecKit的音视频解码及二次处理播放
首先导入选择器picker模块,使用PhotoViewPicker方法拉起图库选择视频文件,将视频文件传递到native侧使用Demuxer解封装器进行解封装,再使用OH_VideoDecoder进行解码(surface模式)送显播放
小帅聊鸿蒙
2024/11/13
1650
HarmonyOS 开发实践——基于AVCodecKit的音视频解码及二次处理播放
鸿蒙Next开发如何实现打开相册选图片功能
1、首先要实例一个选择参数PhotoSelectOptions 里面需要设置媒体文件类型还有一个数量
言程序
2024/12/27
1830
鸿蒙Next开发如何实现打开相册选图片功能
HarmonyOS Next 实战卡片开发 02
卡片需要 使用 'memory://+this.imgName' 来显示图片
万少
2025/02/09
870
HarmonyOS Next 实战卡片开发 02
HarmonyOSNext 端云一体化(5)
上一章节我们主要讲解了查询条件-谓词的基本使用技巧。这一章我们主要来讲解下客户端操作云存储。
万少
2025/02/08
1450
HarmonyOSNext 端云一体化(5)
HarmonyOS 开发实践——基于PhotoViewPicker对图片进行操作
方案一:通过photoViewPicker将图片保存到系统文件管理器管理特定目录:
小帅聊鸿蒙
2024/11/06
2110
HarmonyOS 开发实践——常见预置应用的跳转方式
三方应用实际使用过程中,可能需要跳转到系统的预置应用进行一系列的操作,本文档提供了跳转各个预置应用的方法以及配置的参数
小帅聊鸿蒙
2024/11/18
1560
HarmonyOS 开发实践——常见预置应用的跳转方式
鸿蒙NEXT版仿抖音快手App的选择相册视频
上一节介绍了Video组件的基本用法,那么要想观看视频播放效果,还得先找到待播放的视频文件才行。暂且不提网络视频,因为访问网络需要申请授权,只说从系统相册挑选一个视频文件,那就简单多了。
aqi00
2024/11/27
1560
鸿蒙NEXT版仿抖音快手App的选择相册视频
鸿蒙开发之不申请权限访问相册图片
在应用开发中,很多场景需要我们需要访问相册中的图片。例如:上传头像、上传银行卡、身份证资料、扫描文件功能、美颜功能等
猫林老师
2024/12/23
1620
鸿蒙开发之不申请权限访问相册图片
推荐阅读
相关推荐
【愚公系列】2023年12月 HarmonyOS教学课程 027-ArkUI组件(Image)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档