#夏日挑战赛#小草林学习宝-基于HarmonyOS的分布式应用 原创 精华

小草林T
发布于 2022-7-1 09:19
浏览
2收藏

本文正在参加星光计划3.0—夏日挑战赛


引言

本应用是一款基于HarmonyOS的教育学习工具类应用,利用HarmonyOS的分布式能力,实现了多设备便签数据协同,并支持便签数据的增、删、改、查、分享的操作。目前本应用已上架华为应用市场,用户可以在手机、平板、手表上下载使用。本应用有丰富的计算功能、实用的各种换算、还有汉语词典功能,并且还有聚合翻译,翻译整合百度、有道、腾讯、讯飞、华为共5家的翻译接口,方便用户使用,并且用户在使用华为账号登录后可以轻松的备份便签数据、设置数据到云端,非常方便易用。


- 支持设备以及开发环境

A.支持设备

1.手机

  • 支持 API5 & API6 的设备
  • 支持 HarmonyOS 2.0
  • 支持折叠屏

2.平板

  • 支持 API5 & API6 的设备
  • 支持 HarmonyOS 2.0
  • 支持水墨屏

3.手表

  • 支持 API6 的设备
  • 支持 HarmonyOS 2.0
  • 仅支持watch数字系列

B.开发环境[前端]

  • 操作系统:Windwos10 & Windows11
  • 开发软件:DevEco Studio 3.0 Beta2 for HarmonyOS
  • 开发语言:Java & Js

C.开发环境[后端]

  • 操作系统:Windwos10
  • 开发软件:IntelliJ IDEA Ultimate
  • 开发语言:Java

- 演示视频地址

小草林学习宝-B站

小草林学习宝-社区


- 核心功能设计思路

A.超级便签

  1. 当A设备在便签第一页向左滑时,首先会自动拉起其它设备上的同步页面,代码如下:
List<ohos.distributedschedule.interwork.DeviceInfo> deviceInfoList = DeviceManager.getDeviceList(ohos.distributedschedule.interwork.DeviceInfo.FLAG_GET_ONLINE_DEVICE);
HiLog.info(label, "list=" + deviceInfoList.size());//打点查看设备数量
for (ohos.distributedschedule.interwork.DeviceInfo deviceInfo : deviceInfoList) {
    // 远程启动FA
    Intent remoteIntent = new Intent();
    remoteIntent.setParam("传参id", "传参key");//启动时传的参数
    Operation operation = new Intent.OperationBuilder()
              .withDeviceId(deviceInfo.getDeviceId())
              .withBundleName("应用包名")
              .withAbilityName("应用包名.应用类名")
              .withFlags(Intent.FLAG_ABILITYSLICE_MULTI_DEVICE)
              .build();
    remoteIntent.setOperation(operation);
    try {
        List<AbilityInfo> abilityInfoList = getBundleManager().queryAbilityByIntent(remoteIntent, 0, 0);
        if (abilityInfoList != null && !abilityInfoList.isEmpty()) {
              startAbility(remoteIntent);
        }
    } catch (Exception e) {
        // 处理异常
        HiLog.warn(label, e.getMessage());
    }
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  1. 同时会初始化分布式数据库
private void initDbManager() {
   try {
       this.kvManager = this.createManager();
       this.singleKvStore = createDb(this.kvManager);
       KvStoreObserver kvStoreObserverClient = new KvStoreObserverClient();
       SingleKvStore kvStore = this.singleKvStore;
       kvStore.subscribe(SubscribeType.SUBSCRIBE_TYPE_REMOTE, kvStoreObserverClient);
   } catch (Exception e) {
       AGConnectCrash.getInstance().recordException(e);//AGC平台的崩溃服务
       HiLog.error(label, e.getMessage());
   }
}
private static SingleKvStore createDb(KvManager manager) {
       SingleKvStore kvStore = null;
       try {
           Options options = new Options();
           options.setCreateIfMissing(true).setEncrypt(false).setKvStoreType(KvStoreType.SINGLE_VERSION);
           kvStore = manager.getKvStore(options, STORE_ID);
       } catch (Exception e) {
            AGConnectCrash.getInstance().recordException(e);//AGC平台的崩溃服务
            HiLog.error(label, e.getMessage());
       }
       return kvStore;
}
private KvManager createManager() {
       KvManager manager = null;
       try {
            KvManagerConfig config = new KvManagerConfig(this);
            manager = KvManagerFactory.getInstance().createKvManager(config);
       } catch (Exception e) {
            AGConnectCrash.getInstance().recordException(e);//AGC平台的崩溃服务
       	    HiLog.error(label, e.getMessage());
       }
       return manager;
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  1. 然后就可以根据实际增、删、改、分享便签了

B.聚合翻译

逻辑序列图

Java FA0Js UIJava FA1Java PA0Java PA1Java FA2当用户点击聚合翻译按钮时Java FA传参跳转到Js UIJava FA0为主菜单当用户点击拍照按钮时Js UI传参跳转到Java FA,通过Java UI以及Java开源库进行拍照,并且利用鸿蒙-AI-通用文字识别(离线)或HMS服务-机器学习服务-文本识别(在线)进行OCR识别当识别完成或手动返回时Java FA1将结果传回Js UI当用户点击录音按钮时Js UI传参给Java PA,Java通过调用HMS服务-机器学习服务-实时语音识别把语音进行识别当识别完成后Java PA0将结果传回Js UI用户在翻译界面的复制、粘贴、设置翻译接口均使用原生Js接口当用户点击翻译按钮时Js UI传参给Java PA,Java通过调用HMS服务-机器学习服务-在线文本翻译把文本进行翻译或使用自研后端的聚合翻译接口进行翻译当翻译完成后Java PA1将结果传回Js UI当用户点击播放按钮时Js UI传参跳转到Java FA,通过Java UI以及利用HMS服务-机器学习服务-语音合成(在线或离线)进行语音合成当用户手动返回时Java FA2返回Js UI当用户手动返回时Js UI返回Java FAJava FA0Js UIJava FA1Java PA0Java PA1Java FA2

已接入翻译接口

  • 百度翻译
  • 有道翻译
  • 讯飞翻译
  • 腾讯翻译
  • 华为翻译

C.分布式鉴权登录

功能流程图

Created with Raphaël 2.3.0点击手表登录拉起其它设备上的授权登录界面,并创建分布式数据库拉起成功 or 拉起失败?同意登录 or 取消登录?其它设备向手表通过分布式数据库发送其它设备上已登录用户的用户名信息手表端接收到发送过来的加密数据,进行解密后存储,并向其它设备发送手表UUID其它设备成功接收手表传来的UUID,并上传自研后端加密存储,成功 or 失败?其它设备向手表发送成功标识,手表接收并跳转到用户中心结束提示重试、无法授权yesnoyesnoyesno

- 项目开发流程

01/01 02/01 03/01 04/01 05/01 06/01 07/01需求分析 可行性分析 开始开发 软件测试 接受反馈 完善功能 上架第一版 接受反馈并优化 增加新功能 优化稳定性 项目立项项目实施发布上架小草林学习宝开发流程

©著作权归作者所有,如需转载,请注明出处,否则将追究法律责任
已于2022-7-1 09:20:32修改
6
收藏 2
回复
举报
6
2
2
2条回复
按时间正序
/
按时间倒序
红叶亦知秋
红叶亦知秋

厉害,挺有意思的app

回复
2022-7-1 13:54:11
小草林T
小草林T 回复了 红叶亦知秋
厉害,挺有意思的app

谢谢赞赏

1
回复
2022-7-1 21:42:03


回复
    相关推荐