systemShare无法拉起共享面板
鸿蒙6.0实战踩坑鸿蒙6.0鸿蒙
日志打印拉起成功,但是看不到共享面板。mate 80仿真器/真机都是这样。
代码:
private async handleDataShare(items: FloraData[]): Promise<void> {
if (items.length === 0) return;
try {
//const context = getContext(this) as common.UIAbilityContext;
const uiContext: UIContext = this.getUIContext();
const contextFaker: Context = uiContext.getHostContext() as Context;
const tempFiles: string[] = [];
// 1. 下载图片到本地缓存 (系统分享需要本地路径或 Uri)
for (const item of items) {
const url = `${BASE_URL}${item.filePath}${item.fileName}`;
const fileName = `share_${Date.now()}.jpg`;
const filePath = `${contextFaker.tempDir}/${fileName}`;
await this.downloadImage(url, filePath);
tempFiles.push(`file://` + filePath);
}
// 2. 循环添加多张图片
let utdTypeId = utd.getUniformDataTypeByFilenameExtension('.jpg', utd.UniformDataType.IMAGE);
const shareData = new systemShare.SharedData({
utd: utdTypeId,
uri: fileUri.getUriFromPath(tempFiles[0])
});
for (let i = 1; i < tempFiles.length; i++) {
shareData.addRecord({
utd: utdTypeId,
uri: fileUri.getUriFromPath(tempFiles[i])
});
}
console.info("ShareData Records: " + JSON.stringify(shareData.getRecords()));
// 3. 配置分享面板
let controller = new systemShare.ShareController(shareData);
const context: common.UIAbilityContext = uiContext.getHostContext() as common.UIAbilityContext;
try {
controller.show(context,{
selectionMode: systemShare.SelectionMode.BATCH,
previewMode: systemShare.SharePreviewMode.DEFAULT
}).then(() => {
console.log('ShareController show success.');
});
} catch (err) {
console.error(`同步调用错误: ${JSON.stringify(err)}`);
}
// 4. 清理逻辑(可选:在分享结束后退出多选模式)
//this.exitSelectMode();
} catch (error) {
console.error(`Share failed: ${JSON.stringify(error)}`);
}
}
private async downloadImage(url: string, savePath: string): Promise<void> {
let httpRequest = http.createHttp();
try {
const response = await httpRequest.request(url, {
method: http.RequestMethod.GET,
expectDataType: http.HttpDataType.ARRAY_BUFFER,
connectTimeout: 10000,
readTimeout: 10000
});
if (response.responseCode === http.ResponseCode.OK) {
let file: fs.File = fs.openSync(savePath, fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE | fs.OpenMode.TRUNC);
fs.writeSync(file.fd, response.result as ArrayBuffer);
fs.fsyncSync(file.fd);
fs.closeSync(file);
console.info(`图片下载成功并保存至: ${savePath}`);
} else {
throw new Error(`下载失败,响应码: ${response.responseCode}`);
}
} catch (err) {
let error = err as BusinessError;
console.error(`downloadImage Error: ${error.code} ${error.message}`);
//throw error;
} finally {
httpRequest.destroy();
}
}
日志打印结果:
02-02 19:29:44.030 30562-30562 A03d00/JSAPP com.orchi...alendar2 I 图片下载成功并保存至: /data/storage/el2/base/haps/entry/temp/share_1770031783922.jpg
02-02 19:29:44.041 30562-30562 A03d00/JSAPP com.orchi...alendar2 I ShareData Records: [{"utd":"general.jpeg","uri":"file:///data/storage/el2/base/haps/entry/temp/share_1770031783922.jpg"}]
02-02 19:29:44.389 30562-30562 A03d00/JSAPP com.orchi...alendar2 I ShareController show success.
您需要先 登录 才能评论/回答
全部评论(1)
您好,问题描述中的代码不全无法完整复现,但是根据部分代码我这边做了部分修改没有能够复现问题,设备也可以正常拉起共享面板,您这边是否能够提供一下以下信息方便我们这边进行复现定位:
1. 能够复现问题的完整代码
2. 样机型号代码及对应软件版本号:设置——关于本机
本地验证代码如下:
import { common } from '@kit.AbilityKit';
import { fileUri, picker } from '@kit.CoreFileKit';
import { systemShare } from '@kit.ShareKit';
import { uniformTypeDescriptor as utd } from '@kit.ArkData';
@Entry
@Component
struct Index {
@State message: string = 'hello World';
build() {
Row() {
Column() {
Text(this.message)
.fontSize(50)
.fontWeight(FontWeight.Bold)
.onClick(()=>{
try {
const uiContext: UIContext = this.getUIContext();
const contextFaker: Context = uiContext.getHostContext() as Context;
const tempFiles: string[] = [];
let utdTypeId = utd.getUniformDataTypeByFilenameExtension('.png', utd.UniformDataType.IMAGE);
let shareData: systemShare.SharedData = new systemShare.SharedData({
utd: utdTypeId,
uri: fileUri.getUriFromPath(contextFaker.filesDir + '/image2.png'),
});
let controller = new systemShare.ShareController(shareData);
const context: common.UIAbilityContext = uiContext.getHostContext() as common.UIAbilityContext;
try {
controller.show(context,{
selectionMode: systemShare.SelectionMode.BATCH,
previewMode: systemShare.SharePreviewMode.DEFAULT
}).then(() => {
console.log('ShareController show success.');
});
} catch (err) {
console.error(`同步调用错误: ${JSON.stringify(err)}`);
}
} catch (error) {
console.error(`Share failed: ${JSON.stringify(error)}`);
}
})
}
.width('100%')
}
.height('100%')
}
}
2026-03-03 17:18:16