#夏日挑战赛#小草林学习宝-基于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. 同时会初始化分布式数据库
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. 然后就可以根据实际增、删、改、分享便签了

B.聚合翻译

逻辑序列图

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

已接入翻译接口

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

C.分布式鉴权登录

功能流程图

st=>start: 点击手表登录
op1=>operation: 拉起其它设备上的授权登录界面,并创建分布式数据库
cond=>condition: 拉起成功 or 拉起失败?
op2=>operation: 提示重试、无法授权
op3=>operation: 结束
cond1=>condition: 同意登录 or 取消登录?
op4=>operation: 其它设备向手表通过分布式数据库发送其它设备上已登录用户的用户名信息
op5=>operation: 手表端接收到发送过来的加密数据,进行解密后存储,并向其它设备发送手表UUID
cond2=>condition: 其它设备成功接收手表传来的UUID,并上传自研后端加密存储,成功 or 失败?
op6=>operation: 其它设备向手表发送成功标识,手表接收并跳转到用户中心

st->op1->cond->op2->op3
op4->op5->cond2
op6->op3
cond2(yes)->op6
cond2(no)->op2
cond1(yes)->op4
cond1(no)->op2
cond(yes)->cond1
cond(no)->op2

- 项目开发流程

    axisFormat  %m/%d
    title 小草林学习宝开发流程
    section 项目立项
        需求分析       :a1, 2021-12-15, 10d
        可行性分析     :after a1, 6d
    section 项目实施
        开始开发      	:2022-01-01  , 20d
        软件测试    	:5d
        接受反馈         :10d
        完善功能         :20d
    section 发布上架
        上架第一版    :6d
        接受反馈并优化          :30d
        增加新功能          :60d
	优化稳定性          :60d

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

厉害,挺有意思的app

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

谢谢赞赏

1
回复
2022-7-1 21:42:03
回复
    相关推荐