1.問題描述:

解決方案:

使用Share Kit時,宿主應用和目標應用定義數據類型須遵照UDMF(統一數據管理框架)定義的UTD(統一類型描述符)規範。

UTD中定義的標準化數據類型在設計原則上按物理和邏輯分為兩類:

  • 按物理分類的根節點為general.entity,用於描述類型的物理屬性,比如文件、目錄等,具體可見圖1。
  • 按邏輯分類的根節點為general.object,用於描述類型的功能性特徵,如圖片、網頁等,具體可見圖2。

全部的數據類型可以參考:UTD基礎類型表格。

目標應用需要在應用配置文件(src/main/module.json5)的skills配置actions為ohos.want.action.sendData,並且uris需窮舉所有支持的數據類型。

"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檢測設備是否支持碰一碰能力:

if (canIUse('SystemCapability.Collaboration.HarmonyShare')) {

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

}

3.問題描述:

如何獲取用户點擊了分享到哪個平台或者保存圖片到本地事件?

解決方案:

參考:systemShare(分享)下的on('shareCompleted')接口,註冊用户完成分享事件監聽。返回用户分享渠道,可用於數據統計等。

4.問題描述:

目標應用已配置支持png和jpeg圖片類型,但截屏分享時,分享方式區仍未顯示目標應用。

解決方案:

目標應用在配置支持接收的數據類型時,需窮舉支持的utd。支持全部圖片類型,可聲明:general.image。

5.問題描述:

目標應用配置了module.json5,但是發起分享時卻找不到目標應用是什麼原因

解決方案:

宿主應用發起分享時,需要確認發起的分享的數據類型是否和目標應用匹配。

例如宿主應用發起分享AUDIO類型數據:

let data: systemShare.SharedData = new systemShare.SharedData({

    utd: utd.UniformDataType.AUDIO,

    content: 'Hello HarmonyOS'

  });

目標應用需要配置AUDIO數據類型,配置uri可以參考上方解決方案:

{

  "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文件,點擊分享可以在分享面板選擇已完成上述配置的目標應用。