鴻蒙開發(fā)之無須申請(qǐng)權(quán)限訪問相冊(cè)圖片
訪問相冊(cè)圖片介紹
在應(yīng)用開發(fā)中,很多場(chǎng)景需要我們需要訪問相冊(cè)中的圖片严肪。例如:上傳頭像史煎、上傳銀行卡谦屑、身份證資料、掃描文件功能劲室、美顏功能等
所以訪問相冊(cè)里的圖片成為我們必須要學(xué)習(xí)和掌握的內(nèi)容伦仍。那如何訪問相冊(cè)圖片呢?
在HarmonyOS中很洋,鑒于對(duì)用戶隱私的高度保護(hù)充蓝,要方便的完全讀取相冊(cè)與寫入相冊(cè),需要極其復(fù)雜的權(quán)限審核喉磁。所幸谓苟,HarmonyOS也考慮到讀取相冊(cè)對(duì)于開發(fā)者而言也是一個(gè)非常常用的一個(gè)功能,因而提供了photoAccessHelper里的PhotoViewPicker來幫助開發(fā)者無需獲得復(fù)雜權(quán)限的情況下來讀取相冊(cè)內(nèi)容协怒。
使用方法
-
導(dǎo)入相冊(cè)管理模塊涝焙。
import { photoAccessHelper } from '@kit.MediaLibraryKit';
-
實(shí)例化PhotoViewPicker對(duì)象(也即圖片選擇器對(duì)象)
let photoPicker = new photoAccessHelper.PhotoViewPicker();
-
調(diào)用上述對(duì)象的select方法選擇圖片
photoPicker.select({ // 傳入能選擇的文件類型,這里選的是圖片類型 MIMEType: photoAccessHelper.PhotoViewMIMETypes.IMAGE_TYPE, // 設(shè)置能選擇的數(shù)量 maxSelectNumber: 1 }) .then((res: photoAccessHelper.PhotoSelectResult) => { console.log(res.photoUris.join('')) }) .catch((err: Error) => { // 出錯(cuò)回調(diào) console.log(err.message) }) })
這里可以看到調(diào)用select方法有兩個(gè)參數(shù):MIMEType孕暇、maxSelectNumber
MIMEType即設(shè)置可以選哪些類型的媒體文件仑撞,可選值有
- IMAGE_TYPE:圖片類型,也即
'image/*'
- VIDEO_TYPE:視頻類型妖滔,也即
'video/*'
- IMAGE_VIDEO_TYPE:所有類型皆可隧哮,也即:
'*/*'
- MOVING_PHOTO_IMAGE_TYPE:動(dòng)態(tài)照片類型(實(shí)況圖),也即
'image/movingPhoto'
maxSelectNumber就比較好理解了座舍,就是設(shè)置可以選擇多少數(shù)量沮翔,若不設(shè)置默認(rèn)為50,最大也只能設(shè)置500
- IMAGE_TYPE:圖片類型,也即
-
select方法是用Promise進(jìn)行封裝的曲秉,因此調(diào)用后有兩種狀態(tài)采蚀,成功進(jìn)入then,失敗進(jìn)入catch
進(jìn)入then代表讀取圖片成功承二,讀取到的結(jié)果是
PhotoSelectResult
類型的榆鼠,這個(gè)類型有一個(gè)非常重要的屬性,即為:photoUris
亥鸠,它是一個(gè)數(shù)組妆够,里面保存了選擇的資源的臨時(shí)路徑,像我們上面的代碼读虏,最大只允許選擇1張圖片责静,因此取下標(biāo)0即為選擇的圖片或視頻
用一個(gè)小界面測(cè)試一下
上面我們已經(jīng)學(xué)了它的基本使用,我們用一個(gè)小界面測(cè)試一下盖桥。界面僅需放置一個(gè)Image用來展示選擇后的圖片灾螃,以及用一個(gè)按鈕進(jìn)行圖片選擇,代碼如下
// 導(dǎo)入所需工具
import { photoAccessHelper } from '@kit.MediaLibraryKit'
@Entry
@Component
struct Index {
// 用個(gè)變量保存讀取到得分圖片
@State imgUri: string = ''
build() {
Column() {
// 展示圖片
Image(this.imgUri)
.height('45%')
// 選擇圖片
Button('選擇圖片')
.width('80%')
.onClick(() => {
// 實(shí)例化選擇器
let photoPicker = new photoAccessHelper.PhotoViewPicker()
// 開始選擇圖片揩徊,設(shè)置只允許選擇圖片腰鬼,且最大選擇1張
photoPicker.select({
MIMEType: photoAccessHelper.PhotoViewMIMETypes.IMAGE_TYPE,
maxSelectNumber: 1
})
.then((res: photoAccessHelper.PhotoSelectResult) => {
// 讀取成功則賦值給變量去展示到界面
this.imgUri = res.photoUris[0]
})
.catch((err: Error) => {
// 出錯(cuò)回調(diào)
console.log(err.message)
})
})
}
.width('100%')
.height('100%')
}
}
最終效果如下:成功將貓林老師的照片展示出來了
總結(jié)
- 如果需要不申請(qǐng)權(quán)限的情況下讓app讀取到系統(tǒng)圖庫里的圖片嵌赠,需使用
photoAccessHelper
- 使用起來非常簡(jiǎn)單,僅需實(shí)例化
PhotoViewPicker
對(duì)象后再調(diào)用select
方法即可 - 下篇貓林老師給大家介紹如何不申請(qǐng)權(quán)限的情況下寫入照片到圖庫