分享图片到应用显示“您选择的文件不支持分享”
======================

#### 问题现象

调用分享弹出应用选择，选择任一应用均提示“您选择的文件不支持分享”，请问是什么原因？

问题效果预览：

![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/c5/v3/hR07ZAeYSbKTKSFwZuRfHA/zh-cn_image_0000002658913741.png?HW-CC-KV=V1&HW-CC-Date=20260709T134315Z&HW-CC-Expire=86400&HW-CC-Sign=6263F0520CA6E64DA0336D68930AD4BDCDC9F8C06F3EA14D8892ED7BA5419B29 "点击放大")

#### 背景知识

*   [Share Kit](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/share-introduction)：为应用提供文本、图片、视频等内容跨应用、跨端分享能力。
*   [systemShare](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/share-system-share)：提供分享数据创建及分享面板拉起的功能，提供多种系统标准分享服务，例如分享数据给其他应用、复制、打印等。
*   [SharedRecord](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/share-system-share#section20696483813)：用于构造一条分享数据记录。包含数据类型、数据内容及描述等信息。

#### 问题定位

构造分享数据，添加一条分享记录。

let uiContext: UIContext \= this.getUIContext();
let context: common.UIAbilityContext \= uiContext.getHostContext() as common.UIAbilityContext;
let thumbnail \= await context.resourceManager.getRawFileContent('picture.png');
_//_ _构造ShareData，需配置一条有效数据信息_
let shareData: systemShare.SharedData \= new systemShare.SharedData({
  utd: utd.UniformDataType.HYPERLINK,
  uri: 'xxx',
  title: '测试',
  thumbnail: thumbnail
});

此分享数据无法分享到应用，复现问题，复现场景。

![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/2f/v3/hs5JaBdNSP2qvPQ2ZHg1LA/zh-cn_image_0000002658793793.png?HW-CC-KV=V1&HW-CC-Date=20260709T134315Z&HW-CC-Expire=86400&HW-CC-Sign=EA8FF2182EA1137C1EE093C8FF3D1B4D5FA919C12395DF95FFF1DB4B3D09AFD7 "点击放大")

再将SharedData中参数uri换成content。

let uiContext: UIContext \= this.getUIContext();
let context: common.UIAbilityContext \= uiContext.getHostContext() as common.UIAbilityContext;
let thumbnail \= await context.resourceManager.getRawFileContent('picture.png');
_//_ _构造ShareData，需配置一条有效数据信息_
let shareData: systemShare.SharedData \= new systemShare.SharedData({
  utd: utd.UniformDataType.HYPERLINK,
  content: 'xxx',
  title: '测试',
  thumbnail: thumbnail
});

此时选择任一应用可以进行分享（此示例选择备忘录），分享成功如图。

![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/8c/v3/M6uuRB0USgSFm3ewL-78zg/zh-cn_image_0000002628394526.png?HW-CC-KV=V1&HW-CC-Date=20260709T134315Z&HW-CC-Expire=86400&HW-CC-Sign=65B3EB2C0976BAD29E297BDF08201ECDE38021F38A2BA7A27E6C68AB1E4F0673 "点击放大")

#### 分析结论

*   SharedRecord中参数uri为数据记录的uri。支持的uri类型：
    *   应用文件uri，参见：[应用文件分享](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/share-app-file)。
    *   用户文件uri，参见：[用户文件uri介绍](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/user-file-uri-intro#媒体文件uri介绍)。
*   SharedRecord中参数content为数据记录内容，链接（包含App Linking）、文本类型的内容通过该字段传递。
*   如果SharedRecord中路径参数想设置为uri，那么路径需要为固定格式：“file://<bundleName>/<path>”，否则会显示“您选择的文件不支持分享”。实际路径为https的超链接格式，那么路径参数应该设置为content，此时分享才不会显示异常。

![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/8b/v3/qC0XcRJ_RdSIlrONRuFusA/note_3.0-zh-cn.png?HW-CC-KV=V1&HW-CC-Date=20260709T134315Z&HW-CC-Expire=86400&HW-CC-Sign=481EB1655D853B9D9E946CEB060F56E6B025E33C1376173A483BCA1967F7A7F0)

content和uri二者至少有一个不为空。

#### 修改建议

如果是链接（包含App Linking）、文本类型的内容，SharedRecord中参数可设置为content。

import { systemShare } from '@kit.ShareKit';
import { uniformTypeDescriptor as utd } from '@kit.ArkData';
import { common } from '@kit.AbilityKit';
import { BusinessError } from '@kit.BasicServicesKit';

@Entry
@Component
struct SharePage {
  private async share() {
    let uiContext: UIContext \= this.getUIContext();
    let context: common.UIAbilityContext \= uiContext.getHostContext() as common.UIAbilityContext;
    let thumbail \= await context.resourceManager.getRawFileContent('img.png');
   _ // 构造ShareData，需配置一条有效数据信息_
    let shareData: systemShare.SharedData \= new systemShare.SharedData({
      utd: utd.UniformDataType.HYPERLINK,
    _  // 实际内容根据开发者自行配置_
      content: 'xxx.xxx.com',
      title: '测试',
      thumbnail: thumbail
    });

    let controller: systemShare.ShareController \= new systemShare.ShareController(shareData);
    controller.show(context, {
      selectionMode: systemShare.SelectionMode.SINGLE,
      previewMode: systemShare.SharePreviewMode.DETAIL,
    }).then(() \=\> {
      console.info('ShareController show success.');
    }).catch((error: BusinessError) \=\> {
      console.error(\`ShareController show error. code: ${error.code}, message: ${error.message}\`);
    });
  }

  build() {
    Row() {
      Text('分享')
      Button('分享')
        .onClick(() \=\> {
          this.share();
        })
    }
    .width('100%')
    .margin({ top: 12 })
    .padding({ left: 20, right: 20 })
    .justifyContent(FlexAlign.SpaceBetween)
  }
}

#### 常见FAQ

Q：系统分享是否支持分享在线图片？

A：系统分享不支持分享在线图片，可以先将在线图片保存到本地后再分享。

Q：缩略图thumbnail有什么限制，为什么设置无效？

A：[thumbnail](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/share-system-share#section20696483813)限制图片大小：32KB以下。过大的图片可能导致want数据超限无法拉起分享，可使用[ImagePacker.packing](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/arkts-apis-image-imagepacker#packing13)压缩图片质量。另外，当前规格2in1设备不支持缩略图。

Q：使用systemShare.getSharedData(want)获取分享的数据，报错1003703001，如何解决？

A：数据记录数量超过限制，可以不通过getSharedData接口获取分享数据，直接从want.uri属性，即分享的链接中，解析出分享的数据。

Q：API17的SDK版本下，在App中添加隔空抓取分享的功能，按照[隔空传送API文档](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/gestures-share)进行开发提示报错：Argument of type '"gesturesShare"' is not assignable to parameter of type '"knockShare"。这是什么原因？

A：隔空传送能力为HarmonyOS6.0版本[新增特性](https://developer.huawei.com/consumer/cn/doc/harmonyos-releases/os-new-feature-600#section1911561445211)，三方应用接入该能力需升级至HarmonyOS6.0版本。

Q：content和uri已确认完成配置，仍然提示文件不支持分享，还有可能是什么原因？

A：确认分享文件存在，请排查分享文件的路径或者权限。