HarmonyOS 鸿蒙Next phAccessHelper.showAssetsCreationDialog()无法调起弹窗
HarmonyOS 鸿蒙Next phAccessHelper.showAssetsCreationDialog()无法调起弹窗
1、调用phAccessHelper.showAssetsCreationDialog()
2、视频保存在沙盒里且可以打开,但是无法调起弹窗,方法调用失败
可参考下列代码实现通过showAssetsCreationDialog来保存视频的功能:
import { dataSharePredicates } from '@kit.ArkData';
import { photoAccessHelper } from '@kit.MediaLibraryKit';
import { promptAction } from '@kit.ArkUI';
import fs from '@ohos.file.fs';
import { BusinessError } from '@kit.BasicServicesKit';
const context = getContext(this);
let phAccessHelper = photoAccessHelper.getPhotoAccessHelper(context);
let pathImage: string = getContext().filesDir + "/123.jpg";
let pathImage2: string = getContext().filesDir + "/1234.jpg";
let color: ArrayBuffer = new ArrayBuffer(96)
@Entry
@Component
struct Index {
@State message: string = 'Hello World';
aboutToAppear(): void {
this.writeIamge()
}
/**
* 写图片
*/
async writeIamge() {
// 把图片写到沙箱路径中
const resourceManager = getContext(this).resourceManager
const imageArray = await resourceManager.getMediaContent($r('app.media.sfz'));
console.log("iamge path is:" + pathImage);
let file = fs.openSync(pathImage, fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE);
let file2 = fs.openSync(pathImage2, fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE);
fs.writeSync(file2.fd,imageArray.buffer);
fs.write(file.fd, imageArray.buffer).then((writeLen) => {
console.info("write data to file succeed and size is:" + writeLen);
promptAction.showToast({
message: '图片写入沙箱成功',
duration: 500
});
fs.closeSync(file);
}).catch((err: BusinessError) => {
console.info("write data to file failed with error message: " + err.message + ", error code: " + err.code);
});
}
async example() {
console.info('ShowAssetsCreationDialogDemo.');
try {
// 获取需要保存到媒体库的位于应用沙箱的图片/视频uri
let srcFileUris: Array<string> = [
pathImage,
pathImage2// 实际场景请使用真实的uri
];
let photoCreationConfigs: Array<photoAccessHelper.PhotoCreationConfig> = [
{
title: 'test2', // 可选
fileNameExtension: 'jpg',
photoType: photoAccessHelper.PhotoType.IMAGE,
subtype: photoAccessHelper.PhotoSubtype.DEFAULT, // 可选
},
{
title: 'test3', // 可选
fileNameExtension: 'jpg',
photoType: photoAccessHelper.PhotoType.IMAGE,
subtype: photoAccessHelper.PhotoSubtype.DEFAULT, // 可选
}
];
let desFileUris: Array<string> = await phAccessHelper.showAssetsCreationDialog(srcFileUris, photoCreationConfigs);
console.info('showAssetsCreationDialog success, data is ' + desFileUris);
let filee = fs.openSync(pathImage, fs.OpenMode.READ_ONLY);
let size = fs.statSync(filee.fd).size;
let buf = new ArrayBuffer(size);
fs.readSync(filee.fd, buf);
fs.closeSync(filee);
let file: fs.File = fs.openSync(desFileUris[0], fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE);
let file2: fs.File = fs.openSync(desFileUris[1], fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE);
fs.writeSync(file.fd,buf );
fs.writeSync(file2.fd,buf );
fs.closeSync(file);
fs.closeSync(file2);
let predicates: dataSharePredicates.DataSharePredicates = new dataSharePredicates.DataSharePredicates();
predicates.equalTo('uri', desFileUris[0]);
let fetchOptions: photoAccessHelper.FetchOptions = {
fetchColumns: [],
predicates: predicates
};
// 通过返回的媒体库uri获取对应的PhotoAsset对象
let fetchResult: photoAccessHelper.FetchResult<photoAccessHelper.PhotoAsset> = await phAccessHelper.getAssets(
fetchOptions);
let photoAssets: Array<photoAccessHelper.PhotoAsset> = await fetchResult.getAllObjects();
for (let i = 0; i < photoAssets.length; i++) {
// 将应用沙箱文件内容写入到媒体库
let changeRequest: photoAccessHelper.MediaAssetChangeRequest = new photoAccessHelper.MediaAssetChangeRequest(photoAssets[i]);
changeRequest.addResource(photoAccessHelper.ResourceType.IMAGE_RESOURCE, srcFileUris[i]);
phAccessHelper.applyChanges(changeRequest);
}
} catch (err) {
console.error('showAssetsCreationDialog failed, errCode is ' + err.code + ', errMsg is ' + err.message);
}
}
build() {
RelativeContainer() {
Text(this.message)
.id('HelloWorld')
.fontSize(50)
.fontWeight(FontWeight.Bold)
.onClick(()=>{
this.example()
})
.alignRules({
center: { anchor: '__container__', align: VerticalAlign.Center },
middle: { anchor: '__container__', align: HorizontalAlign.Center }
})
}
.height('100%')
.width('100%')
}
}
更多关于HarmonyOS 鸿蒙Next phAccessHelper.showAssetsCreationDialog()无法调起弹窗的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
phAccessHelper.showAssetsCreationDialog()
方法在 HarmonyOS 中无法调起弹窗的问题,可能是由于以下几个原因:
-
权限问题:确保应用已获取必要的权限,如存储权限等,这些权限对于显示资产创建对话框通常是必需的。
-
上下文问题:检查
phAccessHelper
对象是否正确初始化,并且调用showAssetsCreationDialog
方法时传入的上下文(Context)是有效的。 -
API调用错误:确认
showAssetsCreationDialog
方法的调用方式是否符合 HarmonyOS 的API文档规范,包括参数类型和数量。 -
系统限制:某些系统配置或版本可能限制了弹窗的显示,尤其是在后台或特定模式下。
-
UI线程问题:确保调用
showAssetsCreationDialog
的代码运行在UI线程中,因为UI相关的操作需要在主线程执行。 -
组件未正确注册:确认相关的UI组件(如对话框)已在应用中正确注册和配置。
如果上述检查均无误,但问题依旧存在,可能是由于系统bug或特定设备兼容性问题。此时,建议通过HarmonyOS的开发者社区或官方渠道反馈问题。如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html