<acronym id="s8ci2"><small id="s8ci2"></small></acronym>
<rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
<acronym id="s8ci2"></acronym>
<acronym id="s8ci2"><center id="s8ci2"></center></acronym>
0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

HarmonyOS開發實例:【分布式數據管理】

jf_46214456 ? 來源:jf_46214456 ? 作者:jf_46214456 ? 2024-04-11 09:57 ? 次閱讀

介紹

本示例展示了在eTS中分布式數據管理的使用,包括KVManager對象實例的創建和KVStore數據流轉的使用。

通過設備管理接口[@ohos.distributedDeviceManager],實現設備之間的kvStore對象的數據傳輸交互,該對象擁有以下能力 ;
1、注冊和解除注冊設備上下線變化監聽
2、發現周邊不可信設備
3、認證和取消認證設備
4、查詢可信設備列表
5、查詢本地設備信息,包括設備名稱,設備類型和設備標識
6、發布設備發現

效果預覽

image.png

使用說明 |

1.兩臺設備組網。

2.在一臺界面中點擊右上角的流轉按鈕,在彈窗中選擇對端設備拉起對端設備上的應用。

3.拉起對端設備后,在界面中點擊"+"按鈕新增筆記卡片,點擊每個卡片右上角的"X"按鈕可以刪除此卡片,可以看到對端設備和當前設備界面數據保持一致。

4.操作對端設備,當前設備界面也會保持和對端設備界面顯示一致。

搜狗高速瀏覽器截圖20240326151450.png

具體實現

管理kvStore

1、頁面初始化時獲取此應用所需能力:引入@ohos.data.distributedKVStore初始化kvstore數據庫并對使用kvstore.on數據change進行監聽,通過appstorge判斷獲取相應的key判斷是否是分布式節點 。

源碼:

/*

 * Copyright (c) 2020-2023 Huawei Device Co., Ltd.

 * Licensed under the Apache License, Version 2.0 (the "License");

 * you may not use this file except in compliance with the License.

 * You may obtain a copy of the License at

 *

 *     http://www.apache.org/licenses/LICENSE-2.0

 *

 * Unless required by applicable law or agreed to in writing, software

 * distributed under the License is distributed on an "AS IS" BASIS,

 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

 * See the License for the specific language governing permissions and

 * limitations under the License.

 */



import abilityAccessCtrl from '@ohos.abilityAccessCtrl'

import common from '@ohos.app.ability.common'

import { NoteModel } from '../model/NoteDataModel'

import { NoteListItem } from '../common/NoteItem'

import NoteDataSource from '../common/BasicDataSource'

import { TitleBar } from '../common/TitleBar'

import { KvStoreModel } from '../model/KvStoreModel'

import { RemoteDeviceModel } from '../model/RemoteDeviceModel'

import { transStrToNoteModel } from '../model/NoteDataModel'

import Logger from '../util/Logger'

import Want from '@ohos.app.ability.Want';



const NOTES_CHANGE = 'notesChange'

const EXIT = 'exit'

let kvStoreModel: KvStoreModel = new KvStoreModel()

let notesNum: number = 0

const TAG = 'KvstoreIndexPage'



@Entry

@Component

struct Index {

  private noteDataSource: NoteDataSource = new NoteDataSource([new NoteModel('', '')]);

  @State isDistributed: boolean = false

  private remoteDeviceModel: RemoteDeviceModel = new RemoteDeviceModel()



  aboutToAppear() {

    let context = getContext(this) as common.UIAbilityContext

    let atManager = abilityAccessCtrl.createAtManager()

    try {

      atManager.requestPermissionsFromUser(context,['ohos.permission.DISTRIBUTED_DATASYNC']).then((data) = > {

        Logger.info(TAG, `data: ${JSON.stringify(data)}`)

      }).catch((err: object) = > {

        Logger.info(TAG, `err: ${JSON.stringify(err)}`)

      })

    } catch (err) {

      Logger.info(TAG, `catch err- >${JSON.stringify(err)}`);

    }

    let want = JSON.parse(AppStorage.Get('wantMsg')) as Want;

    Logger.info(TAG,`getWant =${JSON.stringify(want)}`);

    if(want.parameters != undefined) {

      if (want.parameters.isStage === 'Stage') {

        this.isDistributed = true

      }

    }

    kvStoreModel.setOnMessageReceivedListener(NOTES_CHANGE, (value) = > {

      Logger.info(TAG,`NOTES_CHANGE${value}`)

      if (this.isDistributed) {

        if (value.search(EXIT) !== -1) {

          Logger.info(TAG,`[json]EXIT${EXIT}`)

          context.terminateSelf((error) = > {

            Logger.info(TAG,`terminateSelf finished, error=${error}`)

          })

        } else {

          let str: string = value.substring(0, value.lastIndexOf('}]') + 2);

          this.noteDataSource.dataArray = transStrToNoteModel(str);

          this.noteDataSource.notifyDataReload()

          let strNum: string = value.substring(value.lastIndexOf('numBegin') + 'numBegin'.length, value.lastIndexOf('numEnd'));

          notesNum = Number(strNum)

        }

      }

    })

  }



  deleteNoteCallBack = (item: NoteModel) = > {

    Logger.info(TAG, `deleteNote${JSON.stringify(item)}`);

    let dataArray: NoteModel[] = this.noteDataSource.dataArray;

    for (let i = 0; i < dataArray.length; i++) {

      Logger.info(TAG, `i = ${i} and dataArray = ${JSON.stringify(dataArray[i])}`)

      if (dataArray[i].title === item.title) {

        Logger.info(TAG, `deleteNote index` + i);

        this.noteDataSource.dataArray.splice(i, 1);

        break

      }

    }

    this.noteDataSource.notifyDataReload()

    kvStoreModel.put(NOTES_CHANGE, JSON.stringify(this.noteDataSource.dataArray) + 'numBegin' + notesNum + 'numEnd');

  }

  startAbilityCallBack = (key: string) = > {

    Logger.info(TAG,`startAbilityCallBack${key}`);

    if (NOTES_CHANGE === key) {

      kvStoreModel.put(NOTES_CHANGE, `${JSON.stringify(this.noteDataSource.dataArray)}numBegin${notesNum}numEnd`);

    }

    if (EXIT === key) {

      kvStoreModel.put(NOTES_CHANGE, EXIT)

    }

  }



  build() {

    Column() {

      TitleBar({

        startAbilityCallBack: this.startAbilityCallBack,

        remoteDeviceModel: this.remoteDeviceModel,

        isDistributed: $isDistributed

      })



      Grid() {

        LazyForEach(this.noteDataSource, (item: NoteModel, index) = > {

          GridItem() {

            NoteListItem({

              note: item,

              deleteNoteCallBack: this.deleteNoteCallBack,

              noteID: index

            })

          }

          .onClick(() = > {

            Logger.info(TAG,`GridItem.click${item.title}`);

            if (item.title === '' && item.content === '') {

              notesNum += 1

              this.noteDataSource.dataArray[this.noteDataSource.dataArray.length-1] = new NoteModel(`note ${notesNum}`, 'noteContent');

              this.noteDataSource.dataArray.push(new NoteModel('', ''));

              this.noteDataSource.notifyDataReload()

              if (this.isDistributed) {

                kvStoreModel.put(NOTES_CHANGE, `${JSON.stringify(this.noteDataSource.dataArray)}numBegin${notesNum}numEnd`);

              }

            }

          })

        }, (item: NoteModel) = > item.title)

      }

      .columnsTemplate('1fr 1fr 1fr')

      .columnsGap(10)

      .rowsGap(10)

      .padding(10)

      .margin({ bottom: 50 })

    }

  }



  onDestroy() {

    if (this.remoteDeviceModel !== null) {

      this.remoteDeviceModel.unregisterDeviceListCallback()

    }

    if (this.isDistributed) {

      this.isDistributed = false

    }

  }

}

2、如果是分布式節點,如果數據發生變化,處理數據并使用.noteDataSource()進行reload數據。
3、頁面通過kvStore對象進行增刪改查會觸發其他已連接設備的kvStore.on監聽。

管理分布式設備(節點)

1、創建設備管理對象,并指定參數kvstore應用包deviceManager.createDeviceManager("ohos.samples.kvstore", (error, value) => {})
2、獲取可信設備列表,"this.deviceManager.getTrustedDeviceListSync())" 。
3、監聽設備狀態,"this.deviceManager.on('deviceStateChange', (data) => {})",從而對可信設備列表管理。

審核編輯 黃宇

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 數據管理
    +關注

    關注

    1

    文章

    263

    瀏覽量

    19467
  • 分布式
    +關注

    關注

    1

    文章

    771

    瀏覽量

    74147
  • HarmonyOS
    +關注

    關注

    79

    文章

    1893

    瀏覽量

    29354
  • OpenHarmony
    +關注

    關注

    23

    文章

    3397

    瀏覽量

    15203
收藏 人收藏

    評論

    相關推薦

    #硬聲創作季 #HarmonyOS HarmonyOS應用開發-06.1 分布式數據管理平臺設計理念-2

    平臺數據管理HarmonyOS
    水管工
    發布于 :2022年11月16日 11:58:49

    #硬聲創作季 #HarmonyOS HarmonyOS應用開發-06.1 分布式數據管理平臺設計理念-4

    平臺數據管理HarmonyOS
    水管工
    發布于 :2022年11月16日 11:59:29

    #硬聲創作季 #HarmonyOS HarmonyOS應用開發-06.1 分布式數據管理平臺設計理念-5

    平臺數據管理HarmonyOS
    水管工
    發布于 :2022年11月16日 11:59:50

    HarmonyOS應用開發-分布式任務調度

    1. 介紹本篇CodeLab將實現的內容HarmonyOS是面向全場景多終端的分布式操作系統,使得應用程序的開發打破了智能終端互通的性能和數據壁壘,業務邏輯原子化
    發表于 09-18 09:21

    HarmonyOS應用開發-分布式設計

    設計理念HarmonyOS 是面向未來全場景智慧生活方式的分布式操作系統。對消費者而言,HarmonyOS 將生活場景中的各類終端進行能力整合,形成“One Super Device”,以實現
    發表于 09-22 17:11

    HarmonyOS分布式數據庫,為啥這么牛?

    HarmonyOS 2.0 重要的三大核心技術底座之一:HarmonyOS 分布式數據管理平臺,也同步對開發者進行了細致的宣講,我作為
    發表于 11-19 15:38

    如何通過基于云的數據管理技術實現分布式設備的態勢感知?

    如何通過基于云的數據管理技術實現分布式設備的態勢感知?
    發表于 05-25 06:56

    HarmonyOS分布式應用框架深入解讀

    著,一般默默地為開發者和用戶服務?;A服務層:包括分布式調度管理、分布式數據管理、分布式硬件
    發表于 11-22 15:15

    如何高效完成HarmonyOS分布式應用測試?

    作者:liuxun,HarmonyOS測試架構師HarmonyOS是新一代的智能終端操作系統,給開發者提供了設備發現、設備連接、跨設備調用等豐富的分布式API。隨著越來越多的
    發表于 12-13 18:07

    基于OpenHarmony3.1開發的一個分布式手寫板應用

    1.介紹基于TS擴展的聲明開發范式開發一個分布式手寫板應用。涉及的OS特性有分布式拉起和分布式
    發表于 04-07 11:42

    OpenHarmony標準設備應用開發(三)——分布式數據管理

    設備應用開發的第三篇文章,將會在前面兩章的基礎上給大家講解分布式數據管理在多臺設備間,當數據出現變動時,通過訂閱的方式,實現多臺設備間的數據
    發表于 04-07 18:48

    【學習打卡】OpenHarmony的分布式數據管理介紹

    使用它來做出更明智的決策,如果一個系統缺乏適當的數據管理,那就可能會導致數據孤島、數據集之間不一致,甚至數據本身存在錯誤。有效的分布式
    發表于 07-15 15:49

    HarmonyOS數據管理與應用數據持久化(一)

    。 運作機制 數據管理模塊包括用戶首選項、鍵值型數據管理、關系型數據管理、分布式數據對象和跨應用數據管理
    發表于 11-01 16:27

    HarmonyOS分布式文件系統開發指導

    監聽、通過軟總線建立鏈路,并根據分布式的設備安全等級執行不同的數據流轉策略。 ● hmdfs:實現在內核的網絡文件系統,包括緩存管理、文件訪問、元數據管理和沖突
    發表于 11-14 17:14

    HarmonyOS分布式數據管理三大核心技術是什么?

    隨著華為官方公布——將于 2021 年 4 月開放首批升級鴻蒙系統,預計屆時將會涌現一大批鴻蒙學習者,那么你對 HarmonyOS 分布式數據管理三大核心技術有多少了解呢? 這三大技術分別
    的頭像 發表于 03-14 10:54 ?4788次閱讀
    亚洲欧美日韩精品久久_久久精品AⅤ无码中文_日本中文字幕有码在线播放_亚洲视频高清不卡在线观看
    <acronym id="s8ci2"><small id="s8ci2"></small></acronym>
    <rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
    <acronym id="s8ci2"></acronym>
    <acronym id="s8ci2"><center id="s8ci2"></center></acronym>