uniapp harmonyos next 如何实现选择文件并显示在“其他应用列表”

在uniapp开发HarmonyOS NEXT应用时,如何实现文件选择功能并让选择的文件显示在系统的“其他应用列表”中?目前尝试使用uni.chooseFile接口可以选择文件,但选择的文件无法出现在HarmonyOS的“其他应用”共享列表中,请问该如何解决?需要兼容HarmonyOS NEXT的文件权限机制。

2 回复

在HarmonyOS Next中,使用@ohos.file.picker选择文件,通过PhotoViewPickerDocumentViewPicker获取文件URI。将URI存入应用数据库,在“其他应用列表”页面查询并显示文件信息。


在 UniApp 中,目前无法直接实现 HarmonyOS NEXT 的文件选择并显示在“其他应用列表”中,因为:

  1. UniApp 限制:UniApp 主要封装了跨平台 API,但 HarmonyOS NEXT 是华为的新系统,其原生能力尚未完全集成到 UniApp 框架中。
  2. HarmonyOS NEXT 特性:HarmonyOS NEXT 使用 ArkTS 开发,文件选择需调用系统 FilePicker 等原生能力。

推荐解决方案

使用 HarmonyOS 原生开发(ArkTS)实现文件选择功能:

代码示例(ArkTS):

import picker from '@ohos.file.picker';
import common from '@ohos.app.ability.common';

// 打开文件选择器
async function openFilePicker() {
  let photoPicker = new picker.PhotoViewPicker();
  try {
    let photoSelectOptions = new picker.PhotoSelectOptions();
    photoSelectOptions.MIMEType = picker.PhotoViewMIMETypes.IMAGE_TYPE; // 选择图片类型
    photoSelectOptions.maxSelectNumber = 1; // 最多选择1个文件

    let result = await photoPicker.select(photoSelectOptions);
    console.log('PhotoViewPicker.select successfully, result: ' + JSON.stringify(result));

    // 处理选择的文件
    if (result && result.photoUris && result.photoUris.length > 0) {
      let fileUri = result.photoUris[0];
      // 将文件URI分享到其他应用(通过系统分享功能)
      let context = getContext(this) as common.UIAbilityContext;
      let shareManager = context.shareManager;
      await shareManager.share({ uri: fileUri });
    }
  } catch (err) {
    console.error('PhotoViewPicker.select failed with err: ' + err);
  }
}

关键步骤说明:

  1. 文件选择:使用 PhotoViewPicker 选择图片/文件,支持多种 MIME 类型。
  2. 分享到其他应用:通过 shareManager.share() 将文件 URI 分享到系统分享列表,用户可选择目标应用。

注意事项:

  • UniApp 兼容性:若需在 UniApp 中使用,需通过原生插件封装 HarmonyOS API,但目前生态支持有限。
  • 权限配置:在 module.json5 中声明文件读写权限:
    {
      "module": {
        "requestPermissions": [
          {
            "name": "ohos.permission.READ_MEDIA",
            "reason": "$string:reason_description"
          }
        ]
      }
    }
    

建议直接使用 HarmonyOS 原生开发以实现完整功能,或关注 UniApp 后续对 HarmonyOS NEXT 的适配更新。

回到顶部