使用保存控件
保存控件是一種特殊的安全控件,它允許用戶通過點(diǎn)擊按鈕臨時(shí)獲取存儲權(quán)限,而無需通過權(quán)限彈框進(jìn)行授權(quán)確認(rèn)。
集成保存控件后,當(dāng)用戶點(diǎn)擊該控件時(shí),應(yīng)用會(huì)獲得10秒內(nèi)單次訪問媒體庫特權(quán)接口的授權(quán)。這適用于任何需要將文件保存到媒體庫的應(yīng)用場景,例如保存圖片或視頻等。
與需要觸發(fā)系統(tǒng)應(yīng)用并由用戶選擇具體保存路徑的Picker不同,保存控件可以直接保存到指定的媒體庫路徑,使得操作更為便捷。
保存控件效果如圖所示。
約束與限制
- 應(yīng)用在onClick()觸發(fā)回調(diào)到調(diào)用媒體庫特權(quán)接口的時(shí)間間隔不能大于10秒。
- 用戶點(diǎn)擊一次控件,僅獲取一次授權(quán)調(diào)用。
- 為了保障用戶的隱私不被惡意應(yīng)用獲取,應(yīng)用需確保安全控件是可見的且用戶能夠識別的。開發(fā)者需要合理的配置控件的尺寸、顏色等屬性,避免視覺混淆的情況,如果發(fā)生因控件的樣式不合法導(dǎo)致授權(quán)失敗的情況,請檢查設(shè)備錯(cuò)誤日志。
- 開發(fā)前請熟悉鴻蒙開發(fā)指導(dǎo)文檔 :[
gitee.com/li-shizhen-skin/harmony-os/blob/master/README.md
]
開發(fā)步驟
以保存對話中圖片為例,應(yīng)用僅需要在前臺期間,短暫使用保存圖片的特性,不需要長時(shí)間使用。此時(shí),可以直接使用安全控件中的保存控件,免去權(quán)限申請和權(quán)限請求等環(huán)節(jié),獲得臨時(shí)授權(quán),保存對應(yīng)圖片。
導(dǎo)入文件和媒體庫依賴。
import { photoAccessHelper } from '@kit.MediaLibraryKit'; import { fileIo } from '@kit.CoreFileKit';
設(shè)置圖片資源,并添加保存控件。
保存控件是一種類似于按鈕的安全控件,由圖標(biāo)、文本和背景組成。其中,圖標(biāo)和文本至少需要有一個(gè),背景是可選的。圖標(biāo)和文本不能自定義,只能從已有的選項(xiàng)中選擇。在聲明安全控件的接口時(shí),有傳參和不傳參兩種方式。不傳參將默認(rèn)創(chuàng)建一個(gè)包含圖標(biāo)、文字和背景的按鈕,傳參則根據(jù)參數(shù)創(chuàng)建,不包含未配置的元素。
當(dāng)前示例使用默認(rèn)參數(shù)。具體請參見[SaveButton控件]。此外,所有安全控件都繼承[安全控件通用屬性],可用于定制樣式。`HarmonyOS與OpenHarmony鴻蒙文檔籽料:mau123789是v直接拿` import { photoAccessHelper } from '@kit.MediaLibraryKit'; import { fileIo } from '@kit.CoreFileKit'; import { common } from '@kit.AbilityKit'; import { promptAction } from '@kit.ArkUI'; import { BusinessError } from '@kit.BasicServicesKit'; async function savePhotoToGallery(context: common.UIAbilityContext) { let helper = photoAccessHelper.getPhotoAccessHelper(context); try { // onClick觸發(fā)后5秒內(nèi)通過createAsset接口創(chuàng)建圖片文件,5秒后createAsset權(quán)限收回。 let uri = await helper.createAsset(photoAccessHelper.PhotoType.IMAGE, 'jpg'); // 使用uri打開文件,可以持續(xù)寫入內(nèi)容,寫入過程不受時(shí)間限制 let file = await fileIo.open(uri, fileIo.OpenMode.READ_WRITE | fileIo.OpenMode.CREATE); context.resourceManager.getMediaContent($r('app.media.icon').id, 0) .then(async value = > { let media = value.buffer; // 寫到媒體庫文件中 await fileIo.write(file.fd, media); await fileIo.close(file.fd); promptAction.showToast({ message: '已保存至相冊!' }); }); } catch (error) { const err: BusinessError = error as BusinessError; console.error(`Failed to save photo. Code is ${err.code}, message is ${err.message}`); } } @Entry @Component struct Index { build() { Row() { Column({ space: 10 }) { Image($r('app.media.icon')) .height(400) .width('100%') SaveButton().onClick(async (event: ClickEvent, result: SaveButtonOnClickResult) = > { if (result === SaveButtonOnClickResult.SUCCESS) { const context: common.UIAbilityContext = getContext(this) as common.UIAbilityContext; // 免去權(quán)限申請和權(quán)限請求等環(huán)節(jié),獲得臨時(shí)授權(quán),保存對應(yīng)圖片 savePhotoToGallery(context); } else { promptAction.showToast({ message: '設(shè)置權(quán)限失?。? }) } }) } .width('100%') } .height('100%') .backgroundColor(0xF1F3F5) } }
審核編輯 黃宇
-
鴻蒙
+關(guān)注
關(guān)注
57文章
2352瀏覽量
42863
發(fā)布評論請先 登錄
相關(guān)推薦
評論