官网文档参考:Share Kit简介

场景一:设备间基于Share kit分享文件

效果图

方案

  1. 导入相关模块(systemShare、uniformTypeDescriptor)。
  2. 使用systemShare.ShareData构造分享数据,可使用addRecord添加多条分享记录。
  3. 构造systemShare.ShareController对象,再使用show方法进行启动分享面板。
  4. 双方手机都打开华为分享功能,即可进行文件分享。

常见文件格式及其UniformDataType:

<p id="p041518010535">名称</p> <p id="p13415160115310">值</p> <p id="p541515011537">说明</p>
<p id="p2419104875315">TEXT</p> <p id="p1265353214546">general.text</p> <p id="p359105115513">所有文本的基类型,归属类型为OBJECT。</p>
<p id="p6440144845314">PNG</p> <p id="p9653432165411">general.png</p> <p id="p459175205518">PNG图片类型,归属类型为IMAGE。</p>
<p id="p11443104814532">PDF</p> <p id="p18653532105419">com.adobe.pdf</p> <p id="p3592515559">PDF数据类型,归属类型为COMPOSITE_OBJECT。</p>
<p id="p16446348125317">MP3</p> <p id="p265313220542">general.mp3</p> <p id="p15916525510">MP3音频类型,归属类型为AUDIO。</p>
<p id="p044924816538">TYPE_SCRIPT</p> <p id="p9681024125412">general.type-script</p> <p id="p1288510055514">TypeScript源代码类型,归属类型为SCRIPT。</p>

查看更多类型参考:UniformDataType

核心代码

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

// 构造ShareData,需配置一条有效数据信息
let data: systemShare.SharedData = new systemShare.SharedData({
  //设置传输文件的类型(更多类型查看上方表格)
  utd: utd.UniformDataType.PLAIN_TEXT,
  //设置自定义传输文本
  content: 'Hello HarmonyOS'
});
// 额外再添加一条记录
data.addRecord({
  utd: utd.UniformDataType.PNG,
  // 通过文件所在目录进行传输
  uri: 'file://.../test.png'
});
// 构建ShareController
let controller: systemShare.ShareController = new systemShare.ShareController(data);
// 获取UIAbility上下文对象
let context: common.UIAbilityContext = getContext(this) as common.UIAbilityContext;
// 注册分享面板关闭监听
controller.on('dismiss', () => {
  console.info('Share panel closed');
  // 分享结束,可处理其他业务。
});
// 进行分享面板显示
controller.show(context, {
  // DETAIL为详细预览图模式
  previewMode: systemShare.SharePreviewMode.DETAIL,
  // SINGLE为单选模式,传入一个记录则单传,多个则n选1;BATCH为批量模式
  selectionMode: systemShare.SelectionMode.SINGLE
});

场景二:应用间基于Share kit分享文件

效果图

如果应用需要显示在分享面板,则需要构建数据处理能力并按照配置要求在应用配置文件中声明。发送方应用与场景一致,下面介绍接收方应用配置。

1、导入相关模块。

2、目标应用可实现UIAbility,并从want中获取分享数据。

核心代码

import { AbilityConstant, UIAbility, Want } from '@kit.AbilityKit';
import { window } from '@kit.ArkUI';
import { systemShare } from '@kit.ShareKit';
import { BusinessError } from '@kit.BasicServicesKit';

export default class TestUIAbility extends UIAbility {
  onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {
    systemShare.getSharedData(want)
      .then((data: systemShare.SharedData) => {
        data.getRecords().forEach((record: systemShare.SharedRecord) => {
          // 处理分享数据
        });
      })
      .catch((error: BusinessError) => {
        this.context.terminateSelf();
      });
  }

  onWindowStageCreate(windowStage: window.WindowStage): void {
    // Main window is created, set main page for this ability
    windowStage.loadContent('pages/Index', (err) => {
      if (err.code) {
        console.error('Failed to load the content. Cause: ' + JSON.stringify(err) ?? '');
        return;
      }
      console.info('Succeeded in loading the content.');
    });
  }
}

3、被分享应用在应用配置文件(src/main/module.json5)配置actrions为ohos.want.action.sendData;uris需穷举所有支持的数据类型。

核心代码

"abilities": [
  {
    "name": "TestUIAbility",
    "srcEntry": "./ets/entryability/TestUIAbility.ets",
    "description": "$string:EntryAbility_desc",
    "icon": "$media:layered_image",
    "label": "$string:EntryAbility_label",
    "startWindowIcon": "$media:startIcon",
    "startWindowBackground": "$color:start_window_background",
    "exported": true,
    "skills": [
      {
        "actions": [
          "ohos.want.action.sendData"
        ],
        // 目标应用在配置支持接收的数据类型时,需穷举支持的UTD,比如:支持全部图片类型,可声明:general.image,特例:目标应用可以处理全部类型。
        // maxFileSupported 支持的最大数量 不填默认为0
        "uris": [
          {
            "scheme": "file",
            "utd": "general.text",
            "maxFileSupported": 1
          },
          {
            "scheme": "file",
            "utd": "general.png",
            "maxFileSupported": 1
          },
          {
            "scheme": "file",
            "utd": "general.jpeg",
            "maxFileSupported": 1
          }
        ]
      }
    ]
  }
]

4、社交类应用可以通过意图框架接口捐献联系人信息,可以让用户一步分享到应用内的指定用户。


HarmonyOS码上奇行
7k 声望2.8k 粉丝