鸿蒙开发之无须申请权限访问相册图片
访问相册图片介绍
在应用开发中,很多场景需要我们需要访问相册中的图片。例如:上传头像、上传银行卡、身份证资料、扫描文件功能、美颜功能等
所以访问相册里的图片成为我们必须要学习和掌握的内容。那如何访问相册图片呢?
在HarmonyOS中,鉴于对用户隐私的高度保护,要方便的完全读取相册与写入相册,需要极其复杂的权限审核。所幸,HarmonyOS也考虑到读取相册对于开发者而言也是一个非常常用的一个功能,因而提供了photoAccessHelper里的PhotoViewPicker来帮助开发者无需获得复杂权限的情况下来读取相册内容。
使用方法
-
导入相册管理模块。
import { photoAccessHelper } from '@kit.MediaLibraryKit'; -
实例化PhotoViewPicker对象(也即图片选择器对象)
let photoPicker = new photoAccessHelper.PhotoViewPicker(); -
调用上述对象的select方法选择图片
photoPicker.select({ // 传入能选择的文件类型,这里选的是图片类型 MIMEType: photoAccessHelper.PhotoViewMIMETypes.IMAGE_TYPE, // 设置能选择的数量 maxSelectNumber: 1 }) .then((res: photoAccessHelper.PhotoSelectResult) => { console.log(res.photoUris.join('')) }) .catch((err: Error) => { // 出错回调 console.log(err.message) }) })这里可以看到调用select方法有两个参数:MIMEType、maxSelectNumber
MIMEType即设置可以选哪些类型的媒体文件,可选值有
- IMAGE_TYPE:图片类型,也即
'image/*' - VIDEO_TYPE:视频类型,也即
'video/*' - IMAGE_VIDEO_TYPE:所有类型皆可,也即:
'*/*' - MOVING_PHOTO_IMAGE_TYPE:动态照片类型(实况图),也即
'image/movingPhoto'
maxSelectNumber就比较好理解了,就是设置可以选择多少数量,若不设置默认为50,最大也只能设置500
- IMAGE_TYPE:图片类型,也即
-
select方法是用Promise进行封装的,因此调用后有两种状态,成功进入then,失败进入catch
进入then代表读取图片成功,读取到的结果是
PhotoSelectResult类型的,这个类型有一个非常重要的属性,即为:photoUris,它是一个数组,里面保存了选择的资源的临时路径,像我们上面的代码,最大只允许选择1张图片,因此取下标0即为选择的图片或视频
用一个小界面测试一下
上面我们已经学了它的基本使用,我们用一个小界面测试一下。界面仅需放置一个Image用来展示选择后的图片,以及用一个按钮进行图片选择,代码如下
www.e.92demo.com
anshan.e.92demo.com
ankang.e.92demo.com
alaer.e.92demo.com
aletai.e.92demo.com
ali.e.92demo.com
anyang.e.92demo.com
anqing.e.92demo.com
anshun.e.92demo.com
beijing.e.92demo.com
baicheng.e.92demo.com
baishan.e.92demo.com
benxi.e.92demo.com
baotou.e.92demo.com
bayannaoer.e.92demo.com
baoding.e.92demo.com
baoji.e.92demo.com
binzhou.e.92demo.com
bayinguoleng.e.92demo.com
boertala.e.92demo.com
baiyin.e.92demo.com
bengbu.e.92demo.com
bozhou.e.92demo.com
bijie.e.92demo.com
bazhong.e.92demo.com
baoshan.e.92demo.com
baise.e.92demo.com
beihai.e.92demo.com
baisha.e.92demo.com
baoting.e.92demo.com
chongqing.e.92demo.com
changchun.e.92demo.com
chaoyang.e.92demo.com
chifeng.e.92demo.com
chengde.e.92demo.com
cangzhou.e.92demo.com
changzhi.e.92demo.com
changji.e.92demo.com
changdu.e.92demo.com
changzhou.e.92demo.com
chuzhou.e.92demo.com
chizhou.e.92demo.com
changsha.e.92demo.com
chenzhou.e.92demo.com
changde.e.92demo.com
chengdu.e.92demo.com
chaozhou.e.92demo.com
chuxiong.e.92demo.com
chongzuo.e.92demo.com
chengmai.e.92demo.com
changjiang.e.92demo.com
daxinganling.e.92demo.com
daqing.e.92demo.com
dalian.e.92demo.com
dandong.e.92demo.com
datong.e.92demo.com
dezhou.e.92demo.com
dongying.e.92demo.com
dingxi.e.92demo.com
dazhou.e.92demo.com
deyang.e.92demo.com
dongguan.e.92demo.com
dali.e.92demo.com
diqing.e.92demo.com
dehong.e.92demo.com
dongfang.e.92demo.com
danzhou.e.92demo.com
dingan.e.92demo.com
eerduosi.e.92demo.com
ezhou.e.92demo.com
enshi.e.92demo.com
fushun.e.92demo.com
fuxin.e.92demo.com
fuyang.e.92demo.com
fuzhou.e.92demo.com
fuzhouf.e.92demo.com
foshan.e.92demo.com
fangchenggang.e.92demo.com
guoluo.e.92demo.com
gannan.e.92demo.com
guyuan.e.92demo.com
ganzhou.e.92demo.com
guiyang.e.92demo.com
guangan.e.92demo.com
ganzi.e.92demo.com
guangyuan.e.92demo.com
guangzhou.e.92demo.com
guilin.e.92demo.com
guigang.e.92demo.com
haerbin.e.92demo.com
heihe.e.92demo.com
hegang.e.92demo.com
huludao.e.92demo.com
huhehaote.e.92demo.com
hulunbeier.e.92demo.com
hengshui.e.92demo.com
handan.e.92demo.com
hanzhong.e.92demo.com
heze.e.92demo.com
hami.e.92demo.com
hetian.e.92demo.com
haidong.e.92demo.com
huangnan.e.92demo.com
haixi.e.92demo.com
haibei.e.92demo.com
hebi.e.92demo.com
huaian.e.92demo.com
huanggang.e.92demo.com
huangshi.e.92demo.com
hangzhou.e.92demo.com
huzhou.e.92demo.com
hefei.e.92demo.com
huainan.e.92demo.com
huangshan.e.92demo.com
huaibei.e.92demo.com
hengyang.e.92demo.com
huaihua.e.92demo.com
huizhou.e.92demo.com
heyuan.e.92demo.com
honghe.e.92demo.com
hezhou.e.92demo.com
hechi.e.92demo.com
haikou.e.92demo.com
jiamusi.e.92demo.com
jixi.e.92demo.com
jilin.e.92demo.com
jinzhou.e.92demo.com
jinzhong.e.92demo.com
jincheng.e.92demo.com
jinan.e.92demo.com
jining.e.92demo.com
jinchang.e.92demo.com
jiuquan.e.92demo.com
jiayuguan.e.92demo.com
jiaozuo.e.92demo.com
jiyuan.e.92demo.com
jingzhou.e.92demo.com
jingmen.e.92demo.com
jiaxing.e.92demo.com
jinhua.e.92demo.com
jiujiang.e.92demo.com
jian.e.92demo.com
jingdezhen.e.92demo.com
jiangmen.e.92demo.com
jieyang.e.92demo.com
kelamayi.e.92demo.com
kashi.e.92demo.com
kaifeng.e.92demo.com
kunming.e.92demo.com
liaoyuan.e.92demo.com
liaoyang.e.92demo.com
langfang.e.92demo.com
linfen.e.92demo.com
lvliang.e.92demo.com
linyi.e.92demo.com
laiwu.e.92demo.com
liaocheng.e.92demo.com
lasa.e.92demo.com
linzhi.e.92demo.com
lanzhou.e.92demo.com
longnan.e.92demo.com
linxia.e.92demo.com
luoyang.e.92demo.com
luohe.e.92demo.com
lianyungang.e.92demo.com
lishui.e.92demo.com
luan.e.92demo.com
longyan.e.92demo.com
loudi.e.92demo.com
liupanshui.e.92demo.com
luzhou.e.92demo.com
leshan.e.92demo.com
liangshan.e.92demo.com
lincang.e.92demo.com
lijiang.e.92demo.com
liuzhou.e.92demo.com
laibin.e.92demo.com
lingao.e.92demo.com
lingshui.e.92demo.com
ledong.e.92demo.com
mudanjiang.e.92demo.com
maanshan.e.92demo.com
mianyang.e.92demo.com
meishan.e.92demo.com
meizhou.e.92demo.com
maoming.e.92demo.com
naqu.e.92demo.com
nanyang.e.92demo.com
nanjing.e.92demo.com
nantong.e.92demo.com
ningbo.e.92demo.com
ningde.e.92demo.com
nanping.e.92demo.com
nanchang.e.92demo.com
nanchong.e.92demo.com
neijiang.e.92demo.com
nujiang.e.92demo.com
nanning.e.92demo.com
panjin.e.92demo.com
pingliang.e.92demo.com
pingdingshan.e.92demo.com
puyang.e.92demo.com
putian.e.92demo.com
pingxiang.e.92demo.com
panzhihua.e.92demo.com
puer.e.92demo.com
qiqihaer.e.92demo.com
qitaihe.e.92demo.com
qinhuangdao.e.92demo.com
qingdao.e.92demo.com
qingyang.e.92demo.com
qianjiang.e.92demo.com
quzhou.e.92demo.com
quanzhou.e.92demo.com
qiannan.e.92demo.com
qiandongnan.e.92demo.com
qianxinan.e.92demo.com
qingyuan.e.92demo.com
qujing.e.92demo.com
qinzhou.e.92demo.com
qiongzhong.e.92demo.com
qionghai.e.92demo.com
rizhao.e.92demo.com
rikaze.e.92demo.com
shanghai.e.92demo.com
suihua.e.92demo.com
shuangyashan.e.92demo.com
siping.e.92demo.com
songyuan.e.92demo.com
shenyang.e.92demo.com
shijiazhuang.e.92demo.com
shuozhou.e.92demo.com
shangluo.e.92demo.com
shihezi.e.92demo.com
shannan.e.92demo.com
shizuishan.e.92demo.com
shangqiu.e.92demo.com
sanmenxia.e.92demo.com
suzhou.e.92demo.com
suqian.e.92demo.com
shiyan.e.92demo.com
shennongjia.e.92demo.com
suizhou.e.92demo.com
shaoxing.e.92demo.com
suzhous.e.92demo.com
sanming.e.92demo.com
shangrao.e.92demo.com
shaoyang.e.92demo.com
suining.e.92demo.com
shaoguan.e.92demo.com
shantou.e.92demo.com
shenzhen.e.92demo.com
shanwei.e.92demo.com
sanya.e.92demo.com
sansha.e.92demo.com
tianjin.e.92demo.com
tonghua.e.92demo.com
tieling.e.92demo.com
tongliao.e.92demo.com
tangshan.e.92demo.com
taiyuan.e.92demo.com
tongchuan.e.92demo.com
taian.e.92demo.com
tulufan.e.92demo.com
tacheng.e.92demo.com
tumushuke.e.92demo.com
tianshui.e.92demo.com
taizhou.e.92demo.com
tianmen.e.92demo.com
taizhout.e.92demo.com
tongling.e.92demo.com
tongren.e.92demo.com
tunchang.e.92demo.com
wuhai.e.92demo.com
wulanchabu.e.92demo.com
weinan.e.92demo.com
weifang.e.92demo.com
weihai.e.92demo.com
wulumuqi.e.92demo.com
wujiaqu.e.92demo.com
wuwei.e.92demo.com
wuzhong.e.92demo.com
wuxi.e.92demo.com
wuhan.e.92demo.com
wenzhou.e.92demo.com
wuhu.e.92demo.com
wenshan.e.92demo.com
wuzhou.e.92demo.com
wenchang.e.92demo.com
wanning.e.92demo.com
wuzhishan.e.92demo.com
xilinguole.e.92demo.com
xingtai.e.92demo.com
xinzhou.e.92demo.com
xian.e.92demo.com
xianyang.e.92demo.com
xining.e.92demo.com
xinxiang.e.92demo.com
xuchang.e.92demo.com
xinyang.e.92demo.com
xuzhou.e.92demo.com
xiangyang.e.92demo.com
xiaogan.e.92demo.com
xianning.e.92demo.com
xiantao.e.92demo.com
xuancheng.e.92demo.com
xiamen.e.92demo.com
xinyu.e.92demo.com
xiangtan.e.92demo.com
xiangxi.e.92demo.com
xishuangbanna.e.92demo.com
yichun.e.92demo.com
yanbian.e.92demo.com
yingkou.e.92demo.com
yangquan.e.92demo.com
yuncheng.e.92demo.com
yanan.e.92demo.com
yulin.e.92demo.com
yantai.e.92demo.com
yili.e.92demo.com
yushu.e.92demo.com
yinchuan.e.92demo.com
yangzhou.e.92demo.com
yancheng.e.92demo.com
yichang.e.92demo.com
yichuny.e.92demo.com
yingtan.e.92demo.com
yiyang.e.92demo.com
yueyang.e.92demo.com
yongzhou.e.92demo.com
yibin.e.92demo.com
yaan.e.92demo.com
yunfu.e.92demo.com
yangjiang.e.92demo.com
yuxi.e.92demo.com
yuliny.e.92demo.com
zhangjiakou.e.92demo.com
zibo.e.92demo.com
zaozhuang.e.92demo.com
zhangye.e.92demo.com
zhongwei.e.92demo.com
zhengzhou.e.92demo.com
zhoukou.e.92demo.com
zhumadian.e.92demo.com
zhenjiang.e.92demo.com
zhoushan.e.92demo.com
zhangzhou.e.92demo.com
zhuzhou.e.92demo.com
zhangjiajie.e.92demo.com
zunyi.e.92demo.com
zigong.e.92demo.com
ziyang.e.92demo.com
zhuhai.e.92demo.com
zhaoqing.e.92demo.com
zhanjiang.e.92demo.com
zhongshan.e.92demo.com
zhaotong.e.92demo.com
// 导入所需工具
import { photoAccessHelper } from '@kit.MediaLibraryKit'
@Entry
@Component
struct Index {
// 用个变量保存读取到得分图片
@State imgUri: string = ''
build() {
Column() {
// 展示图片
Image(this.imgUri)
.height('45%')
// 选择图片
Button('选择图片')
.width('80%')
.onClick(() => {
// 实例化选择器
let photoPicker = new photoAccessHelper.PhotoViewPicker()
// 开始选择图片,设置只允许选择图片,且最大选择1张
photoPicker.select({
MIMEType: photoAccessHelper.PhotoViewMIMETypes.IMAGE_TYPE,
maxSelectNumber: 1
})
.then((res: photoAccessHelper.PhotoSelectResult) => {
// 读取成功则赋值给变量去展示到界面
this.imgUri = res.photoUris[0]
})
.catch((err: Error) => {
// 出错回调
console.log(err.message)
})
})
}
.width('100%')
.height('100%')
}
}
最终效果如下:成功将猫林老师的照片展示出来了


被折叠的 条评论
为什么被折叠?



