HarmonyOS 鸿蒙Next:不同应用程序间文件分享问题,能拉取应用但分享失败

发布于 1周前 作者 gougou168 来自 鸿蒙OS

HarmonyOS 鸿蒙Next:不同应用程序间文件分享问题,能拉取应用但分享失败

https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/share-app-file-V5#%E5%88%86%E4%BA%AB%E6%96%87%E4%BB%B6%E7%BB%99%E5%85%B6%E4%BB%96%E5%BA%94%E7%94%A8

按照官方的参考案例进行根本无法实现文件分享,不知何故,请教大神。

应用1:进行文件分享

let pathInSandbox = this.context.filesDir + “/test.txt”;
// 将沙箱路径转换为uri
let uri = fileUri.getUriFromPath(pathInSandbox);
console.log(“result—>”, uri)
let want: Want = {
// 配置被分享文件的读写权限,例如对被分享应用进行读写授权
flags: wantConstant.Flags.FLAG_AUTH_WRITE_URI_PERMISSION |
wantConstant.Flags.FLAG_AUTH_READ_URI_PERMISSION,
// 配置分享应用的隐式拉起规则
action: ‘ohos.want.action.sendData’,
uri: uri,
type: ‘text/plain’
}
this.context.startAbility(want)
.then(() => {
promptAction.showToast({ message: “分享成功!” })
})
.catch((err: BusinessError) => {
console.error(Invoke startAbility failed, code is ${err.code}, message is ${err.message});
});

应用2:根据应用1中分享的uri获取文件内容

export default class EntryAbility extends UIAbility {
onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {
let uri = want.uri;
if (uri == null || uri == undefined) {
console.info(“result---->”, ‘uri is invalid’);
return;
}
try {
let srcFile = fs.openSync(uri, fs.OpenMode.READ_WRITE);
//读取文件内容
let bufSize = 4096;
let readSize = 0;
let buf = new ArrayBuffer(bufSize);
let readOptions: ReadOptions = {
offset: readSize,
length: bufSize
};
let readLen = fs.readSync(srcFile.fd, buf, readOptions);
while (readLen > 0) {
readSize += readLen;
readOptions.offset = readSize;
readLen = fs.readSync(srcFile.fd, buf, readOptions);
}
const decoder = util.TextDecoder.create(“utf-8”);
const str = decoder.decodeWithStream(new Uint8Array(buf));
console.info(‘分享的内容为:’ + str);
} catch (err) {
console.info(‘分享错误:’ + JSON.stringify(err));
}
}

onWindowStageCreate(windowStage: window.WindowStage): void {
windowStage.loadContent(‘pages/Index’);
}
}

并且在应用2的module.json5中添加配置如下:

{
“actions”: [
“ohos.want.action.sendData”
],
“uris”: [
{
“scheme”: “file”,
“type”: “text/plain”
}
]
}

但是发现应用2中这个uri一直为空字符串,但是在应用1中这个uri内容是存在的为:file://com.example.first/data/storage/el2/base/haps/entry/files/test.txt,这是什么原因?

3 回复
楼主您好,您看下在被分享方的UIAbility被启动后通过接口want的参数获取分享文件的URI么,获取后打印该值看下是否为空。

HarmonyOS Next 纯血鸿蒙免费课程https://www.itying.com/category-93-b0.html

被分享方的这个URI是不为空的,能够显示沙箱文件路径

针对您提到的HarmonyOS 鸿蒙Next中不同应用程序间文件分享问题,能拉取应用但分享失败的情况,这通常与文件URI的生成、分享权限的配置以及接收应用的配置有关。

首先,请确保分享文件的应用已正确生成文件URI,并配置了相应的读写权限。在HarmonyOS中,应用需要通过fileUri.getUriFromPath方法将文件路径转换为URI,并通过startAbility方法启动分享。

其次,接收文件的应用需要在其module.json5配置文件中正确声明接收文件的意图和URI类型。特别是actionsuris字段,需要配置为能够接收ohos.want.action.sendData动作和指定类型的文件URI。

如果以上配置均正确无误,但分享依旧失败,请检查是否有其他安全策略或权限限制影响了文件分享。此外,也可以尝试使用文件描述符(FD)的方式进行分享,但需要注意FD分享方式在文件关闭后无法再打开,因此可能不适合所有场景。

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部