[文章]HarmonyOS原子化服务开发实战-华为分享

阅读量0
0
1
1、集成IDL接口
“java”目录同级目录创建“idl”接口目录(可手动添加或通过DevEco Studio创建):com/huawei/hwshare/third(固定路径),然后创建名为IHwShareCallback.idlIHwShareService.idlIDL文件。
  1. IHwShareCallback.idl :
  2. interface com.huawei.hwshare.third.IHwShareCallback {
  3.     [oneway] void notifyState([in] int state);
  4. }

  5. IHwShareService.idl :
  6. sequenceable ohos.interwork.utils.PacMapEx;
  7. interface com.huawei.hwshare.third.IHwShareCallback;

  8. interface com.huawei.hwshare.third.IHwShareService {
  9.     int startAuth([in] String appId, [in] IHwShareCallback callback);
  10.     int shareFaInfo([in] PacMapEx pacMapEx);
  11. }
复制代码

注意:IDL接口路径不能修改否则会报错。
图片12.png

执行相应上图所示的指令生成相应文件。
图片13.png
2、根据官网编写逻辑
按照官网的流程创建ShareFaManager类,用于管理分享方与华为分享的连接通道和数据交互。
3、引用

在相应的位置上调用接口。
  1. private void hwShow() {
  2.         byte[] bytes;
  3.         InputStream inputStream = null;
  4.         try {
  5.             inputStream = getContext().getResourceManager().getResource(ResourceTable.Media_show);
  6.             bytes = readInputStream(inputStream);
  7.             PacMapEx pacMap = new PacMapEx();
  8.             pacMap.putObjectValue(ShareFaManager.SHARING_FA_TYPE, 0);  //分享的服务类型
  9.             pacMap.putObjectValue(ShareFaManager.HM_BUNDLE_NAME, getBundleName());
  10.             pacMap.putObjectValue(ShareFaManager.SHARING_EXTRA_INFO, getSQLParam().toString());  //携带的额外信息,可传递到被拉起的服务界面

  11.             pacMap.putObjectValue(ShareFaManager.HM_ABILITY_NAME, PersonalAbility.class.getName());  //分享的服务的Ability类名

  12.             pacMap.putObjectValue(ShareFaManager.SHARING_CONTENT_INFO, "欢迎使用原卡秀原子化服务卡片!");  //卡片展示的服务介绍信息

  13.             pacMap.putObjectValue(ShareFaManager.SHARING_THUMB_DATA, bytes);  //卡片展示服务介绍图片
  14. //
  15.             inputStream = getContext().getResourceManager().getResource(ResourceTable.Media_icon);
  16.             bytes = readInputStream(inputStream);
  17.             pacMap.putObjectValue(ShareFaManager.HM_FA_ICON, bytes);  //服务图标,如果不传递此参数,取分享方默认服务图标

  18.             pacMap.putObjectValue(ShareFaManager.HM_FA_NAME, "原卡秀");   //卡片展示的服务名称
  19.             // 第一个参数为appid,在华为AGC创建原子化服务时自动生成。
  20.             ShareFaManager.getInstance(this).shareFaInfo("765710042858007296", pacMap);

  21.         } catch (IOException e) {
  22.             e.printStackTrace();
  23.         } catch (NotExistException e) {
  24.             e.printStackTrace();
  25.         }
  26.     }
复制代码

bytes必须是byte[]类型,否则会报参数错误。
  1. private byte[] readInputStream(InputStream inputStream) {

  2.     ByteArrayOutputStream baos = new ByteArrayOutputStream();

  3.     byte[] buffer = new byte[1024];

  4.     int length = -1;

  5.     try {
  6.         while ((length = inputStream.read(buffer)) != -1) {
  7.             baos.write(buffer, 0, length);
  8.         }
  9.         baos.flush();
  10.     } catch (IOException e) {
  11.         e.printStackTrace();
  12.     }

  13.     byte[] data = baos.toByteArray();

  14.     try {
  15.         inputStream.close();
  16.         baos.close();
  17.     } catch (IOException e) {
  18.         e.printStackTrace();
  19.     }

  20.     return data;

  21. }
复制代码
附件:

回帖

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容图片侵权或者其他问题,请联系本站作侵删。 侵权投诉
链接复制成功,分享给好友