HarmonyOS 鸿蒙Next中共享面板拉起失败
HarmonyOS 鸿蒙Next中共享面板拉起失败 harmony OS SDK 6.02,Mate80真机和仿真器都看不到拉起的面板。代码如下:
try {
const uiContext: UIContext = this.getUIContext();
const contextFaker: Context = uiContext.getHostContext() as Context;
const tempFiles: string[] = [];
for (const item of items) {
const url = `${BASE_URL}${item.filePath}${item.fileName}`;
const fileName = `share_${Date.now()}_${item.id}.jpg`;
const filePath = `${contextFaker.tempDir}/${fileName}`;
await this.downloadImage(url, filePath);
tempFiles.push(`file://` + filePath);
}
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])
});
}
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)}`);
}
用户日志打印"ShareController show success."
系统日志有udmf错误:
02-06 11:37:36.727 21452-21452 C01656/UDMF com.orchi…alendar2 E CustomUtdStore::ReadTypeCfgs Failed to open custom utd file, errno=2
02-06 11:37:36.727 21452-21452 C01656/UDMF com.orchi…alendar2 E CustomUtdStore::GetDynamicUtd ReadTypeCfgs failed, ret = 27721734.
02-06 11:37:36.871 21452-22850 C04204/WMSScb com.orchi…alendar2 E SetRSUIContext: RSUIContext is null, RSNode [id: 131627862720519], RSUIContext is null
02-06 11:37:36.872 21452-22850 C04201/DMS com.orchi…alendar2 E GetScreenSession: Error found screen session with id: 18446744073709551615
02-06 11:37:36.887 21452-21452 C04201/DMS com.orchi…alendar2 E GetScreenSession: Error found screen session with id: 18446744073709551615
更多关于HarmonyOS 鸿蒙Next中共享面板拉起失败的实战教程也可以访问 https://www.itying.com/category-93-b0.html
开发者您好,问题描述中的代码不全无法完整复现,但是根据部分代码我这边做了部分修改没有能够复现问题,6.0.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%')
}
}
更多关于HarmonyOS 鸿蒙Next中共享面板拉起失败的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
谢谢答复!
对比了一下,问题出在uri的手动拼接导致格式非法。原来的代码是:
tempFiles.push(`file://` + filePath);
let uri = fileUri.getUriFromPath(tempFiles[0])
得到的uri是原始路径uri:file:///data/storage/…
统一使用 fileUri.getUriFromPath() 处理物理路径后问题解决:
const finalUri = fileUri.getUriFromPath(filePath);
tempFiles.push(finalUri);
鸿蒙Next中共享面板拉起失败,通常由以下原因导致:
- 权限未配置:检查是否在配置文件中声明了
ohos.permission.SYSTEM_FLOAT_WINDOW权限。 - 组件未注册:确认共享面板相关Ability或ExtensionAbility已在
module.json5中正确注册。 - API版本不匹配:共享面板接口可能依赖特定API版本,需检查设备系统版本是否支持。
- 资源缺失:面板布局或资源文件未正确打包或引用。
- 生命周期冲突:面板与当前页面生命周期状态冲突,导致无法正常显示。


