在其它手機端,若想保存圖片到相冊,需要申請對應(yīng)的權(quán)限,而鴻蒙中對應(yīng)的權(quán)限為受限開放權(quán)限,普通應(yīng)用一般不讓申請,這個時候我們可以使用安全保存控件來臨時申請權(quán)限,用于保存圖片到相冊。
受限開放權(quán)限
應(yīng)用權(quán)限分為三類,一類是對所有應(yīng)用開放,所有應(yīng)用均可申請使用;一類是受限開放權(quán)限,僅少量符合特殊場景的應(yīng)用可在通過審批后,使用受限權(quán)限;最后一類是僅對 MDM(Mobile Device Management)設(shè)備管理應(yīng)用開放。
保存圖片到相機涉及到的權(quán)限是 ohos.permission.WRITE_IMAGEVIDEO,僅特殊場景與功能才可申請此權(quán)限,例如應(yīng)用需要克隆、備份或同步圖片 / 視頻類文件,其它場景下使用安全控件來臨時申請權(quán)限。
使用安全控件保存本地圖片到相機
我們先使用安全控件讓用戶點擊臨時獲取權(quán)限,獲取到權(quán)限后,再使用 photoAccessHelper 來將我們本地的圖片保存在相冊,示例如下

以上示例請保證 icon.png 在本地真實的存在。當我們使用 helper 調(diào)用 applyChanges 時,因為是在安全控件點擊后調(diào)用的,臨時獲取權(quán)限,可以正常執(zhí)行,若不在安全控件內(nèi),則需保證已獲取對應(yīng)的權(quán)限。
使用安全控件保存服務(wù)端圖片到相機
服務(wù)端圖片我們一般使用下載服務(wù)將圖片下載到本地,若本地不需要備份,則直接將下載好的圖片 buffer 保存到相冊即可。我們將本地圖片轉(zhuǎn)成 buffer 來模擬服務(wù)端下載后的圖片,再使用 photoAccessHelper 創(chuàng)建一個相冊圖片資源,并將我們的圖片 buffer 寫入到這個圖片資源中,就可以將圖片保存到相冊了,示例如下

使用保存確認彈窗保存圖片
前面的方式都是強依賴于安全控件,但在有些場景下,我們沒辦法使用安全控件,比如在 H5 頁面中,再比如在 Flutter 頁面中等等,這個時候我們可以借助保存確認彈窗來保存圖片。當我們通過 photoAccessHelper 調(diào)用 showAssetsCreationDialog 時,系統(tǒng)會彈出一個確認彈窗,用戶點擊允許,則我們可以將圖片保存到相冊,若用戶點擊禁止,則不能保存圖片到相冊。使用這種方式,我們就不用強依賴于安全控件了,示例如下

以上示例請保存 icon.png 在本地真實存在。(轉(zhuǎn)載自 51CTO,作者:龍兒箏)


