HarmonyOS鸿蒙Next原子化服务开发实战-华为分享

HarmonyOS鸿蒙Next原子化服务开发实战-华为分享

  • 集成IDL接口

java目录同级目录创建idl接口目录(可手动添加或通过DevEco Studio创建):com/huawei/hwshare/third(固定路径),然后创建名为IHwShareCallback.idlIHwShareService.idl的IDL文件。

IHwShareCallback.idl :interface com.huawei.hwshare.third.IHwShareCallback {
    [oneway] void notifyState([in] int state);
}

IHwShareService.idl :sequenceable ohos.interwork.utils.PacMapEx;
interface com.huawei.hwshare.third.IHwShareCallback;
interface com.huawei.hwshare.third.IHwShareService {
    int startAuth([in] String appId, [in] IHwShareCallback callback);
    int shareFaInfo([in] PacMapEx pacMapEx);
}

注意:IDL接口路径不能修改否则会报错。

执行相应上图所示的指令生成相应文件。

  1. 根据官网编写逻辑

按照官网的流程创建ShareFaManager类,用于管理分享方与华为分享的连接通道和数据交互。

  1. 引用

在相应的位置上调用接口。

private void hwShow() {
    byte[] bytes;
    InputStream inputStream = null;
    try {
        inputStream = getContext().getResourceManager().getResource(ResourceTable.Media_show);
        bytes = readInputStream(inputStream);
        PacMapEx pacMap = new PacMapEx();
        pacMap.putObjectValue(ShareFaManager.SHARING_FA_TYPE, 0); //分享的服务类型
        pacMap.putObjectValue(ShareFaManager.HM_BUNDLE_NAME, getBundleName());
        pacMap.putObjectValue(ShareFaManager.SHARING_EXTRA_INFO, getSQLParam().toString()); //携带的额外信息,可传递到被拉起的服务界面
        pacMap.putObjectValue(ShareFaManager.HM_ABILITY_NAME, PersonalAbility.class.getName()); //分享的服务的Ability类名
        pacMap.putObjectValue(ShareFaManager.SHARING_CONTENT_INFO, "欢迎使用原卡秀原子化服务卡片!"); //卡片展示的服务介绍信息
        pacMap.putObjectValue(ShareFaManager.SHARING_THUMB_DATA, bytes); //卡片展示服务介绍图片
        // inputStream = getContext().getResourceManager().getResource(ResourceTable.Media_icon);
        bytes = readInputStream(inputStream);
        pacMap.putObjectValue(ShareFaManager.HM_FA_ICON, bytes); //服务图标,如果不传递此参数,取分享方默认服务图标
        pacMap.putObjectValue(ShareFaManager.HM_FA_NAME, "原卡秀"); //卡片展示的服务名称
        // 第一个参数为appid,在华为AGC创建原子化服务时自动生成。
        ShareFaManager.getInstance(this).shareFaInfo("765710042858007296", pacMap);
    } catch (IOException e) {
        e.printStackTrace();
    } catch (NotExistException e) {
        e.printStackTrace();
    }
}

bytes必须是byte[]类型,否则会报参数错误。

private byte[] readInputStream(InputStream inputStream) {
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    byte[] buffer = new byte[1024];
    int length = -1;
    try {
        while ((length = inputStream.read(buffer)) != -1) {
            baos.write(buffer, 0, length);
        }
        baos.flush();
    } catch (IOException e) {
        e.printStackTrace();
    }
    byte[] data = baos.toByteArray();
    try {
        inputStream.close();
        baos.close();
    } catch (IOException e) {
        e.printStackTrace();
    }
    return data;
}

更多关于HarmonyOS鸿蒙Next原子化服务开发实战-华为分享的实战教程也可以访问 https://www.itying.com/category-93-b0.html

6 回复

如何调试呢,在真机上一直提示“参数错误,分享失败”,我不知道如何定位具体错误位置。

更多关于HarmonyOS鸿蒙Next原子化服务开发实战-华为分享的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


你在参照文档和开发文档检查一下呗,这个是比较成熟的了。各个环节都会导致错误的。你这个是参数错误,会不会代码中有自定义的参数你没改过来。

非常感谢,正好今天研究这个呢就搜到你的帖子了

好像前两天才看到有人问这个

项目名称

  • 状态:已上线
  • 创建者:张三
  • 创建时间:2023-01-01
  • 最后更新者:李四
  • 最后更新时间:2023-03-01

在HarmonyOS鸿蒙Next中,原子化服务是轻量级的应用模块,旨在提供特定功能,无需安装完整应用即可使用。开发原子化服务时,首先需在DevEco Studio中创建原子化服务项目,配置config.json文件定义服务入口和权限。通过Ability类实现核心功能,并利用Intent进行服务调用。华为分享功能可通过集成HMS CoreShare Kit实现,支持跨设备、跨平台的内容分享。开发完成后,使用DevEco Studio进行调试和打包,发布至AppGallery Connect供用户使用。

回到顶部