【FAQ】HarmonyOS SDK 闭源开放能力 — Share Kit

1.问题描述:

分享的时候,如何获取精准的utd类型?

解决方案:

使用Share Kit时,宿主应用和目标应用定义数据类型须遵照UDMF(统一数据管理框架)定义的UTD(统一类型描述符)规范。

UTD中定义的标准化数据类型在设计原则上按物理和逻辑分为两类:

  • 按物理分类的根节点为general.entity,用于描述类型的物理属性,比如文件、目录等,具体可见图1。

  • 按逻辑分类的根节点为general.object,用于描述类型的功能性特征,如图片、网页等,具体可见图2。

全部的数据类型可以参考:UTD基础类型表格

目标应用需要在应用配置文件(src/main/module.json5)的skills配置actions为ohos.want.action.sendData,并且uris需穷举所有支持的数据类型。

Json 复制代码
"extensionAbilities": [  

  {

    "name": "TestShareAbility",

    "srcEntry": "./ets/abilities/TestShareAbility.ts",

    "type": "share", // 支持分享数据处理

    "description": "xxx",

    "exported": true,

    "label": "$string:xx_label",

    "icon": "$media:icon",

    "skills": [

      {

        "actions": [

          "ohos.want.action.sendData"

        ],

        // 目标应用在配置支持接收的数据类型时,需穷举支持的UTD

        // 比如:支持全部图片类型,可声明:general.image,如支持全部数据类型,可声明:general.object

        "uris": [

          {

            "scheme": "file",

            "utd": "general.text",

            "maxFileSupported": 1

          },

          {

            "scheme": "file",

            "utd": "general.png",

            "maxFileSupported": 1

          },

          {

            "scheme": "file",

            "utd": "general.jpeg",

            "maxFileSupported": 1

          }

        ]

      }

    ]

  }

]

2.问题描述:

如何判断设备是否支持碰一碰分享?

解决方案:

通过canIUse检测设备是否支持碰一碰能力:

TypeScript 复制代码
if (canIUse('SystemCapability.Collaboration.HarmonyShare')) {

  // 支持一碰分享的能力.

}

3.问题描述:

如何获取用户点击了分享到哪个平台或者保存图片到本地事件?

解决方案:

参考:systemShare(分享)下的on('shareCompleted')接口,注册用户完成分享事件监听。返回用户分享渠道,可用于数据统计等。

4.问题描述:

目标应用已配置支持png和jpeg图片类型,但截屏分享时,分享方式区仍未显示目标应用。

解决方案:

目标应用在配置支持接收的数据类型时,需穷举支持的utd。支持全部图片类型,可声明:general.image。

5.问题描述:

目标应用配置了module.json5,但是发起分享时却找不到目标应用是什么原因

解决方案:

宿主应用发起分享时,需要确认发起的分享的数据类型是否和目标应用匹配。

例如宿主应用发起分享AUDIO类型数据:

ts 复制代码
 let data: systemShare.SharedData = new systemShare.SharedData({

    utd: utd.UniformDataType.AUDIO,

    content: 'Hello HarmonyOS'

  });

目标应用需要配置AUDIO数据类型,配置uri可以参考上方解决方案:

Json 复制代码
{

  "scheme": "file",

  "utd": "general.audio",

  "maxFileSupported": 1

}

6.问题描述:

MP3文件分享给外部,无可打开应用。

解决方案:

【问题描述】

在目标应用的module.json5文件中进行配置,但是分享面板的分享方式区没有目标应用可以进行选中分享。

1、目标效果:在文件管理中选择指定文件后,点击分享可以在分享面板中显示目标应用的图标并点击该图标进行文件分享;

2、实际效果:在文件管理中选择指定文件后,点击分享可以在分享面板中未显示目标应用的图标。

待分享的module.json的配置信息如下:

复制代码
  "module": {

    "abilities": [

      {

        "skills": [

          {

            "actions": [

              "ohos.want.action.sendData"

            ],

            "uris": [

              {

                "scheme": "file",

                "type": "application/caj"

              },

              {

                "scheme": "file",

                "type": "application/pdf"

              },

              {

                "scheme": "file",

                "type": "application/epub"

              },

            ]

          }

        ]

      }

    ]

  }

【背景知识】

分享服务可以根据分享的数据类型、数量等信息构建分享面板,为用户提供内容预览、推荐分享联系人、关联应用及操作界面,便于用户快速选择分享应用或操作,将内容分发到目标应用。如果应用需要显示在分享面板,则需要构建数据处理能力并按照配置要求在应用配置文件中声明。

【问题定位】

分析module.json5文件的配置项发现uris数组中定义的是type字段,这个字段无法在使用分享服务时匹配目标应用从而导致目标应用未出现在分享面板的分享方式区。

【分析结论】

module.json5文件中uris数组中定义了错误的字段type所以无法选择目标应用进行分享,需要设置utd字段并且取值为标准化数据类型。

【修改建议】

1、正确在目标应用的module.json5文件中声明utd字段并设置需要分享的文件所对应的标准数据化类型

2、示例配置代码如下:

复制代码
 "skills": [

   {

     "entities": [

       "entity.system.home"

     ],

     "actions": [

       "action.system.home"

     ]

   },

   {

     "actions": [

       "action.system.home",

       "ohos.want.action.viewData",

       "ohos.want.action.sendData"

     ],

     "uris": [

       {

         "scheme": "file",

         //所有表示逻辑内容类型的基类型,

         "utd": "general.object",

         //标识一次能接收或打开的最大数量。,

         "maxFileSupported": 1

       }

     ]

   }

 ]

3、打开测试真机的文件管理,选择pdf文件,点击分享可以在分享面板选择已完成上述配置的目标应用。

相关推荐
昼-枕7 小时前
鸿蒙Flutter实战:构建智能健身教练应用
flutter·华为·harmonyos
昼-枕7 小时前
鸿蒙与 Flutter 的融合探索:跨平台开发的新可能
flutter·华为·harmonyos
特立独行的猫a7 小时前
鸿蒙PC三方库移植:zlib数据压缩库的适配实践
华为·harmonyos·移植·zlib·鸿蒙pc
AirDroid_cn7 小时前
鸿蒙NEXT:平板作为扩展屏时,触摸延迟如何优化?
华为·电脑·harmonyos
wtrees_松阳8 小时前
【弦绝九章】HarmonyOS异步心法:asynchronous插件详解
华为·harmonyos
HarmonyOS_SDK8 小时前
智能填充隐藏功能——自动补全地址表单所在地区
harmonyos
不老刘9 小时前
Sherpa-onnx 离线 TTS 集成解决 openharmony 下语音播报完整方案
harmonyos·鸿蒙·tts·sherpa
音浪豆豆_Rachel9 小时前
Flutter跨平台通信的实战演练:复杂数据结构与单元测试在鸿蒙生态中的完美实现
数据结构·flutter·单元测试·harmonyos
坚果派·白晓明9 小时前
【鸿蒙开发者跨平台开发可选工具】Windows 11 安装 Android Studio 完整指南
windows·android studio·harmonyos·开发者可选工具·开源项目可选ide·鸿蒙跨平台开发