【HarmonyOS实战开发】鸿蒙系统图片视频选择器之Flutter插件实践

背景

本文主要在Fanbook原有图片选择器插件的基础上,新增鸿蒙系统支持,实现了针对鸿蒙系统特定图片视频选器,里面包含了图片压缩、图片基础信息获取、视频压缩、获取视频基本信息、取视频封面等操作。当然,在实现这块需求的过程中,遇到了不少的问题和解决方案,我挑选了几条核心功能点来和大家分享,相信看完之后,对于鸿蒙系统的图片选择器实现有一定的帮助。阅读本文需要有一个定Flutter插件开发基础和鸿蒙ArkTS开发基础。

核心问题点

鸿蒙系统应用权限

应用权限,就是应用向系统申请的底层SDK使用权限,比如通知、相册、定位等。鸿蒙系统的权限按照对应用开放规则,可以分简单分为对所有应用开放权限和受限开放权限。

  1. 受限开放权限

大多数鸿蒙APP的应用等级都是普通,所以受限开放权限基本上无法使用。举个例子说明下。

比如想保存图片到相册,需要ohos.permission.WRITE_IMAGEVIDEO这个受限权限,这个权限正常情况下比较难申请到,所以如果鸿蒙APP有保存图片到相册的需求,可以使用鸿蒙的提供的SaveButton控件,用这个安全控件来保存。

再比如使用phAccessHelper.getAssets类获取相册中图片需要ohos.permission.READ_IMAGEVIDEO这个权限,这个权限也是受限权限。所以如果想在鸿蒙APP实现自定义图片选择器界面基本上没戏,得使用鸿蒙提供的PhotoViewPicker来获取相册中图片或视频的uri

特别说明一下,如果向华为那边申请到了受限权限,添加到requestPermissions中之后,还需要重新签名。

  1. 对所有应用开放权限

对所有应用开放的权限这个没什么好说的,就是所有应用都可以申请的权限。

按照是否需要用户授权分为,可分为system_grantuser_grant两类。

其中system_grant是系统权限类型,比如ohos.permission.INTERNET,只需要项目的在module.json5中申请,应用就可以正常访问网络,不会弹框让用户再次授权。

user_grant指的是用户授权类型,在该类型的权限需要再用户确认许可下,APP才可以使用.这个类似我们iOS和安卓一样,比如获取ohos.permission.LOCATION地理位置权限,首次会弹出一个授权确认框。


// module.json5
"requestPermissions": [
 {
 "name" :  "ohos.permission.INTERNET",
 "reason": "$string:EntryAbility_desc",
 "usedScene": {
 "abilities": [
 "EntryAbility"
 ],
 "when": "inuse"
 }
 },
 {
 "name" :  "ohos.permission.LOCATION",
 "reason": "$string:EntryAbility_desc",
 "usedScene": {
 "abilities": [
 "EntryAbility"
 ],
 "when": "inuse"
 }
 }
]

调用系统图片视频选择器

前文说了鸿蒙系统的权限知识点,再来实现基于鸿蒙系统的图片选择器,我们就知道不能按照以前iOS和安卓那样,自己定义图片选择和浏览界面了。

其实这样也好,对于开发者来说少了不少事情,因为系统会对相册中的超大图片进行优化,避免图片选择器最常见的内存溢出闪退。但是如果想需要定制化,比如用户不能选择超过500M的视频、超长图片,这就无法前置做了,只能在用户选择结束之后才能做。

放两张使用PhotoViewPicker拉起图片选择,可以感受下,其实鸿蒙系统提供的选择器已经很完善了,可以满足大多数需求。

image.png

调用系统图片选择器,还是比较简单,首先需要import这个库

import { photoAccessHelper } from '@kit.MediaLibraryKit';

创建photoAccessHelper.PhotoSelectOptions()实例photoSelectOptions,可以自定义一些属性。

isOriginalSupported:表示是否显示原图选项

maxSelectNumber:最多选择多少张资源

MIMEType: 表示选择的资源类型,可以是纯图,纯视频,或者全部。

<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值