HarmonyOS 鸿蒙Next图片分享

HarmonyOS 鸿蒙Next图片分享 图片分享不支持分享网络图片吗?如果需要先下载,有没有网络图片保存到沙箱或者本地的示例

3 回复

您可以直接以链接方式分享。

更多关于HarmonyOS 鸿蒙Next图片分享的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


HarmonyOS Next的图片分享功能基于系统级分布式能力实现。通过分布式软总线技术,设备间可自动发现并建立安全连接。分享时调用统一的DataShare接口,支持跨设备直接传输图片原文件。该功能不依赖第三方应用,利用分布式文件系统实现端到端加密传输。用户可在控制中心选择目标设备快速分享,系统会自动处理不同屏幕尺寸的适配。

在HarmonyOS Next中,图片分享功能目前主要支持分享本地沙箱路径的图片文件。网络图片需要先下载到应用沙箱目录后才能进行分享。

以下是网络图片下载并保存到沙箱的示例代码:

import fs from '@ohos.file.fs';
import http from '@ohos.net.http';

async function downloadAndShareImage(imageUrl: string) {
  try {
    // 创建http请求
    let httpRequest = http.createHttp();
    
    // 下载图片
    let response = await httpRequest.request(
      imageUrl,
      {
        method: http.RequestMethod.GET,
        connectTimeout: 60000,
        readTimeout: 60000,
      }
    );

    if (response.responseCode === 200) {
      // 获取沙箱路径
      let context = getContext(this) as common.UIAbilityContext;
      let filesDir = context.filesDir;
      
      // 生成文件名
      let fileName = 'shared_image_' + new Date().getTime() + '.jpg';
      let filePath = filesDir + '/' + fileName;
      
      // 保存图片到沙箱
      let file = fs.openSync(filePath, fs.OpenMode.CREATE | fs.OpenMode.READ_WRITE);
      await fs.writeSync(file.fd, response.result as ArrayBuffer);
      fs.closeSync(file);
      
      // 分享图片
      let want = {
        action: 'ohos.want.action.sendData',
        parameters: {
          'ability.want.params.uri': filePath,
          'ability.want.params.type': 'image/*'
        }
      };
      
      let context = getContext(this) as common.UIAbilityContext;
      context.startAbility(want);
    }
  } catch (error) {
    console.error('下载或分享图片失败:', error);
  }
}

注意:需要先在module.json5中声明网络访问权限:

{
  "module": {
    "requestPermissions": [
      {
        "name": "ohos.permission.INTERNET"
      }
    ]
  }
}

此示例展示了完整的网络图片下载到沙箱并分享的流程。

回到顶部