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选择的弹窗如下:

cke_50506.png

选择了弹出里的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

2 回复

在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给非鸿蒙应用。

根据你的描述,以下为关键点分析及可行方案:

  1. 当前方案问题

    • 你尝试的wantInfo配置中,abilityName指向安卓Activity,这在鸿蒙调用第三方安卓应用时通常无效(鸿蒙通过bundleName自动匹配入口)。
    • 沙盒路径(如file://${fd})无法被WPS直接访问,因为第三方应用无权限读取其他应用的沙盒目录。
  2. 替代方案(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.environmentgetExternalStoragePublicDir方法将文件复制到公共目录(如Documents),再传递其URI给WPS。需声明ohos.permission.WRITE_USER_STORAGE权限。
  3. 注意

    • 预装WPS可能为系统定制版本,建议以应用市场下载的cn.wps.moffice_eng为测试对象。
    • 若WPS为安卓应用,需确保其支持content://协议读取文件(主流办公应用通常支持)。
  4. 调试建议

    • 通过hdc shell dumpsys ability查看WPS支持的intent-filter,确认其可处理的URI类型。
    • 使用hilog打印生成的URI,确保格式正确。

综上,优先尝试fileuri模块生成临时URI的方案。若仍失败,可考虑将文件复制到公共目录(需处理用户授权),再传递公共路径URI。

回到顶部