HarmonyOS 鸿蒙Next 4.3.0(API8)中,用第三方WPS打开沙盒文件的问题
HarmonyOS 鸿蒙Next 4.3.0(API8)中,用第三方WPS打开沙盒文件的问题 大家好,我有一个需求,就是在harmonyos4.3.0(api8)版本的平板上,能打开我在沙盒里存放的office文件,感觉听起来是一个很小的需求,但是最近困扰了我很久时间,也查了很多资料。
首先平板预装了一个WPS Office PC的一个app,但是通过hdc shell我查不到它的bundleName,于是我从应用市场下载了一个WPS Office,发现他们是两个app,通过hdc shell查到了从应用市场下载的wps的bundleName是cn.wps.moffice_eng。
在尝试的过程中,我通过浏览器下载了几个示例文档,默认存放在了download文件夹,不论是从浏览器的下载记录,还是从文件管理app去打开示例文档,都能用wps打开,于是开始尝试去调用featureAbility.startAbility去打开沙盒文档。
我的是用的deveco3.1.1开的fa模型app,在此过程中我研究了@ohos.ability.featureAbility模块的featureAbility.startAbility方式打开,但是一直没弄明白如果是文件的时候,want参数应该怎样传,
1、我尝试了@ohos.app.ability.Want (Want)-通用能力的接口(推荐)-ArkTS API-Ability Kit(程序框架服务)-应用框架 - 华为HarmonyOS开发者参照文档的文件描述方式:
let fd = fileIo.openSync(fileUri, 0o2);
let wantInfo = {
deviceId: "", // 本设备
bundleName: "cn.wps.moffice_eng", // 安卓Office应用包名
abilityName: "cn.wps.moffice.documentmanager.PreStartActivity2", // 安卓应用入口
action: 'ohos.want.action.VIEW_ACTION', // 关键:设置查看动作
uri: path, // 此处留空,改用parameters传递
type: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
parameters: {
// 关键参数:传递文件URI
"keyFileUri": `file://${fd}`,
// 可选:指定文件类型
"mime-type": "application/vnd.openxmlformats-officedocument.wordprocessingml.document"
}
};
其中的abilityName我并不知道,于是我将abilityName、action、uri、type注释后运行发现也能打开wps选择的弹窗如下:

选择了弹出里的wps后,某些条目确实能打开wps,但是都无法打开文件。后来我用hdc shell查到了从应用市场下载的wps Office,不是鸿蒙app,应该是安卓的apk,上面的某一个条目点开后是对文件夹进行授权,但是沙盒内的路径又无法授权给第三方。
2、于是我想尝试新的思路,能否将文件复制到download文件,然后将被复制到download文件夹的文件描述符用want里的参数传给wps,但是查询文档发现,api8好像不允许把文件复制到download文件夹。
过程中我也通过查询文档有个previewkit,但是这个在api8版本没有,api9才有。
我想应该还是want参数封装的问题,但是现在的文档又是纯血鸿蒙的文档,有些调用方式和api8版本的又不一致,所以来求助,有精通这方面的大佬帮忙指点一下吗?甚是感激。
更多关于HarmonyOS 鸿蒙Next 4.3.0(API8)中,用第三方WPS打开沙盒文件的问题的实战教程也可以访问 https://www.itying.com/category-93-b0.html
在HarmonyOS Next 4.3.0 (API 8)中,第三方应用(如WPS)默认无法直接访问应用沙盒内的私有文件。若需实现此功能,需使用FilePicker选择器将文件共享至外部应用。具体流程为:通过FilePicker获取用户选择的沙盒文件URI,再调用系统能力接口(如startAbility)并携带此URI,以启动WPS并打开文件。此过程涉及权限声明与URI的临时授权访问。
更多关于HarmonyOS 鸿蒙Next 4.3.0(API8)中,用第三方WPS打开沙盒文件的问题的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
在HarmonyOS 4.3.0 (API 8) 的FA模型中,通过第三方应用(如WPS)打开沙盒内文件确实存在限制。核心问题在于沙盒路径(data/storage/el1/bundle/...)对第三方应用不可见,且API 8的@ohos.ability.featureAbility模块不支持直接传递文件URI给非鸿蒙应用。
根据你的描述,以下为关键点分析及可行方案:
-
当前方案问题:
- 你尝试的
wantInfo配置中,abilityName指向安卓Activity,这在鸿蒙调用第三方安卓应用时通常无效(鸿蒙通过bundleName自动匹配入口)。 - 沙盒路径(如
file://${fd})无法被WPS直接访问,因为第三方应用无权限读取其他应用的沙盒目录。
- 你尝试的
-
替代方案(API 8适用):
- 使用
@ohos.file.fileuri模块生成临时URI: 通过fileuri.getUriFromPath将沙盒文件路径转换为content://格式的临时URI,并添加ohos.flag.param.keep_alive标志保持临时授权。示例:import fileuri from '@ohos.file.fileuri'; let tempUri = fileuri.getUriFromPath(context, sandboxFilePath); let want = { bundleName: "cn.wps.moffice_eng", action: 'ohos.want.action.VIEW_ACTION', type: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document', uri: tempUri, flags: 0x00000008 // ohos.flag.param.keep_alive }; featureAbility.startAbility({ want }); - 复制到公共目录(需权限):
虽然API 8限制写入download目录,但可通过
@ohos.file.environment的getExternalStoragePublicDir方法将文件复制到公共目录(如Documents),再传递其URI给WPS。需声明ohos.permission.WRITE_USER_STORAGE权限。
- 使用
-
注意:
- 预装WPS可能为系统定制版本,建议以应用市场下载的
cn.wps.moffice_eng为测试对象。 - 若WPS为安卓应用,需确保其支持
content://协议读取文件(主流办公应用通常支持)。
- 预装WPS可能为系统定制版本,建议以应用市场下载的
-
调试建议:
- 通过
hdc shell dumpsys ability查看WPS支持的intent-filter,确认其可处理的URI类型。 - 使用
hilog打印生成的URI,确保格式正确。
- 通过
综上,优先尝试fileuri模块生成临时URI的方案。若仍失败,可考虑将文件复制到公共目录(需处理用户授权),再传递公共路径URI。

