HarmonyOS 鸿蒙Next 放在沙箱里的图片,图库里可以看到吗
HarmonyOS 鸿蒙Next 放在沙箱里的图片,图库里可以看到吗
沙箱中的图片,图库是看不到的
可以使用安全保存控件SaveButton,或者拉起弹框保存api来保存图片,参考demo如下
import { photoAccessHelper } from '@kit.MediaLibraryKit';
import { image } from '@kit.ImageKit';
import { resourceManager } from '@kit.LocalizationKit';
import { BusinessError } from '@kit.BasicServicesKit';
import { fileIo, fileUri } from '@kit.CoreFileKit';
import { promptAction } from '@kit.ArkUI';
let context = getContext(this);
let phAccessHelper = photoAccessHelper.getPhotoAccessHelper(context);
@Entry
@Component
struct SaveImagePage {
@State message: string = 'Hello World';
@State pixelMap?: image.PixelMap = undefined
async aboutToAppear(): Promise<void> {
let decodingOptions: image.DecodingOptions = {
editable: true,
desiredPixelFormat: 3,
}
const rawFileDescriptor: resourceManager.RawFileDescriptor = await getContext(this).resourceManager.getRawFd('test.png');
const imageSource: image.ImageSource = image.createImageSource(rawFileDescriptor);
this.pixelMap = await imageSource.createPixelMap(decodingOptions)
}
build() {
Column(){
Image(this.pixelMap).width(200).height(200)
Button('保存').onClick(async () =>{
try {
const imagePackerApi: image.ImagePacker = image.createImagePacker();
let packOpts: image.PackingOption = { format: "image/jpeg", quality: 98 }
let filePath = context.filesDir + "/" + "test.png"
imagePackerApi.packing(this.pixelMap, packOpts, (err: BusinessError, data: ArrayBuffer) => {
let file = fileIo.openSync(filePath,fileIo.OpenMode.CREATE | fileIo.OpenMode.READ_WRITE);
fileIo.writeSync(file.fd,data)
})
let uri = fileUri.getUriFromPath(filePath);
let srcFileUris: Array<string> = [
uri // 实际场景请使用真实的uri
];
let photoCreationConfigs: Array<photoAccessHelper.PhotoCreationConfig> = [
{
// title: 'test', // 可选
fileNameExtension: 'png',
photoType: photoAccessHelper.PhotoType.IMAGE,
subtype: photoAccessHelper.PhotoSubtype.DEFAULT, // 可选
}
];
let desFileUris: Array<string> = await phAccessHelper.showAssetsCreationDialog(srcFileUris, photoCreationConfigs);
let imageFile = fileIo.openSync(desFileUris[0],fileIo.OpenMode.CREATE | fileIo.OpenMode.READ_WRITE);
await fileIo.copyFile(filePath,imageFile.fd,0).then(() =>{
promptAction.showToast({
message:"下载成功,已保存到相册"
})
})
await fileIo.close(imageFile.fd)
console.info('showAssetsCreationDialog success, data is ' + desFileUris);
} catch (err) {
console.error('showAssetsCreationDialog failed, errCode is ' + err.code + ', errMsg is ' + err.message);
}
})
}
}
}
更多关于HarmonyOS 鸿蒙Next 放在沙箱里的图片,图库里可以看到吗的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
作为IT专家,对于HarmonyOS 鸿蒙Next系统有一定的了解。关于HarmonyOS 鸿蒙Next放在沙箱里的图片,图库里能否看到的问题,这主要取决于沙箱的配置以及系统的权限管理。
在HarmonyOS 鸿蒙Next系统中,应用沙箱为每个应用提供了完全独立的运行环境,包括文件系统。因此,如果一个应用将图片保存在自己的沙箱内,那么理论上其他应用(如图库应用)是无法直接访问这些图片的,除非系统或用户授予了相应的权限。
然而,如果图库应用被系统授予了访问该沙箱的权限,或者图片被保存在了沙箱外的共享区域,那么图库应用就有可能显示这些图片。
此外,还需要考虑系统缓存、图片格式以及.nomedia文件等因素的影响,这些都可能导致图片在图库中无法正常显示。
综上所述,HarmonyOS 鸿蒙Next放在沙箱里的图片,图库里能否看到取决于多种因素。如果无法确定具体原因,建议检查沙箱配置、系统权限以及图片存储位置等。如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html。