色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

HarmonyOS開發(fā)實(shí)例:【分布式數(shù)據(jù)管理】

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

介紹

本示例展示了在eTS中分布式數(shù)據(jù)管理的使用,包括KVManager對(duì)象實(shí)例的創(chuàng)建和KVStore數(shù)據(jù)流轉(zhuǎn)的使用。

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

效果預(yù)覽

image.png

使用說明 |

1.兩臺(tái)設(shè)備組網(wǎng)。

2.在一臺(tái)界面中點(diǎn)擊右上角的流轉(zhuǎn)按鈕,在彈窗中選擇對(duì)端設(shè)備拉起對(duì)端設(shè)備上的應(yīng)用。

3.拉起對(duì)端設(shè)備后,在界面中點(diǎn)擊"+"按鈕新增筆記卡片,點(diǎn)擊每個(gè)卡片右上角的"X"按鈕可以刪除此卡片,可以看到對(duì)端設(shè)備和當(dāng)前設(shè)備界面數(shù)據(jù)保持一致。

4.操作對(duì)端設(shè)備,當(dāng)前設(shè)備界面也會(huì)保持和對(duì)端設(shè)備界面顯示一致。

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

具體實(shí)現(xiàn)

管理kvStore

1、頁(yè)面初始化時(shí)獲取此應(yīng)用所需能力:引入@ohos.data.distributedKVStore初始化kvstore數(shù)據(jù)庫(kù)并對(duì)使用kvstore.on數(shù)據(jù)change進(jìn)行監(jiān)聽,通過appstorge判斷獲取相應(yīng)的key判斷是否是分布式節(jié)點(diǎn) 。

源碼:

/*

 * 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、如果是分布式節(jié)點(diǎn),如果數(shù)據(jù)發(fā)生變化,處理數(shù)據(jù)并使用.noteDataSource()進(jìn)行reload數(shù)據(jù)。
3、頁(yè)面通過kvStore對(duì)象進(jìn)行增刪改查會(huì)觸發(fā)其他已連接設(shè)備的kvStore.on監(jiān)聽。

管理分布式設(shè)備(節(jié)點(diǎn))

1、創(chuàng)建設(shè)備管理對(duì)象,并指定參數(shù)kvstore應(yīng)用包deviceManager.createDeviceManager("ohos.samples.kvstore", (error, value) => {})
2、獲取可信設(shè)備列表,"this.deviceManager.getTrustedDeviceListSync())" 。
3、監(jiān)聽設(shè)備狀態(tài),"this.deviceManager.on('deviceStateChange', (data) => {})",從而對(duì)可信設(shè)備列表管理。

審核編輯 黃宇

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 數(shù)據(jù)管理
    +關(guān)注

    關(guān)注

    1

    文章

    294

    瀏覽量

    19610
  • 分布式
    +關(guān)注

    關(guān)注

    1

    文章

    895

    瀏覽量

    74498
  • HarmonyOS
    +關(guān)注

    關(guān)注

    79

    文章

    1973

    瀏覽量

    30143
  • OpenHarmony
    +關(guān)注

    關(guān)注

    25

    文章

    3713

    瀏覽量

    16254
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    HarmonyOS實(shí)戰(zhàn)案例:【分布式賬本】

    Demo基于Open Harmony系統(tǒng)使用ETS語(yǔ)言進(jìn)行編寫,本Demo主要通過設(shè)備認(rèn)證、分布式拉起、分布式數(shù)據(jù)管理等功能來實(shí)現(xiàn)。
    的頭像 發(fā)表于 04-12 16:40 ?1312次閱讀
    <b class='flag-5'>HarmonyOS</b>實(shí)戰(zhàn)案例:【<b class='flag-5'>分布式</b>賬本】

    #硬聲創(chuàng)作季 #HarmonyOS HarmonyOS應(yīng)用開發(fā)-06.1 分布式數(shù)據(jù)管理平臺(tái)設(shè)計(jì)理念-2

    平臺(tái)數(shù)據(jù)管理HarmonyOS
    水管工
    發(fā)布于 :2022年11月16日 11:58:49

    HarmonyOS應(yīng)用開發(fā)-分布式任務(wù)調(diào)度

    1. 介紹本篇CodeLab將實(shí)現(xiàn)的內(nèi)容HarmonyOS是面向全場(chǎng)景多終端的分布式操作系統(tǒng),使得應(yīng)用程序的開發(fā)打破了智能終端互通的性能和數(shù)據(jù)壁壘,業(yè)務(wù)邏輯原子化
    發(fā)表于 09-18 09:21

    HarmonyOS應(yīng)用開發(fā)-分布式設(shè)計(jì)

    設(shè)計(jì)理念HarmonyOS 是面向未來全場(chǎng)景智慧生活方式的分布式操作系統(tǒng)。對(duì)消費(fèi)者而言,HarmonyOS 將生活場(chǎng)景中的各類終端進(jìn)行能力整合,形成“One Super Device”,以實(shí)現(xiàn)
    發(fā)表于 09-22 17:11

    HarmonyOS分布式數(shù)據(jù)庫(kù),為啥這么牛?

    HarmonyOS 2.0 重要的三大核心技術(shù)底座之一:HarmonyOS 分布式數(shù)據(jù)管理平臺(tái),也同步對(duì)開發(fā)者進(jìn)行了細(xì)致的宣講,我作為
    發(fā)表于 11-19 15:38

    如何通過基于云的數(shù)據(jù)管理技術(shù)實(shí)現(xiàn)分布式設(shè)備的態(tài)勢(shì)感知?

    如何通過基于云的數(shù)據(jù)管理技術(shù)實(shí)現(xiàn)分布式設(shè)備的態(tài)勢(shì)感知?
    發(fā)表于 05-25 06:56

    HarmonyOS分布式應(yīng)用框架深入解讀

    著,一般默默地為開發(fā)者和用戶服務(wù)。基礎(chǔ)服務(wù)層:包括分布式調(diào)度管理分布式數(shù)據(jù)管理分布式硬件
    發(fā)表于 11-22 15:15

    如何高效完成HarmonyOS分布式應(yīng)用測(cè)試?

    作者:liuxun,HarmonyOS測(cè)試架構(gòu)師HarmonyOS是新一代的智能終端操作系統(tǒng),給開發(fā)者提供了設(shè)備發(fā)現(xiàn)、設(shè)備連接、跨設(shè)備調(diào)用等豐富的分布式API。隨著越來越多的
    發(fā)表于 12-13 18:07

    基于OpenHarmony3.1開發(fā)的一個(gè)分布式手寫板應(yīng)用

    1.介紹基于TS擴(kuò)展的聲明開發(fā)范式開發(fā)一個(gè)分布式手寫板應(yīng)用。涉及的OS特性有分布式拉起和分布式
    發(fā)表于 04-07 11:42

    OpenHarmony標(biāo)準(zhǔn)設(shè)備應(yīng)用開發(fā)(三)——分布式數(shù)據(jù)管理

    設(shè)備應(yīng)用開發(fā)的第三篇文章,將會(huì)在前面兩章的基礎(chǔ)上給大家講解分布式數(shù)據(jù)管理在多臺(tái)設(shè)備間,當(dāng)數(shù)據(jù)出現(xiàn)變動(dòng)時(shí),通過訂閱的方式,實(shí)現(xiàn)多臺(tái)設(shè)備間的數(shù)據(jù)
    發(fā)表于 04-07 18:48

    【學(xué)習(xí)打卡】OpenHarmony的分布式數(shù)據(jù)管理介紹

    使用它來做出更明智的決策,如果一個(gè)系統(tǒng)缺乏適當(dāng)?shù)?b class='flag-5'>數(shù)據(jù)管理,那就可能會(huì)導(dǎo)致數(shù)據(jù)孤島、數(shù)據(jù)集之間不一致,甚至數(shù)據(jù)本身存在錯(cuò)誤。有效的分布式
    發(fā)表于 07-15 15:49

    HarmonyOS數(shù)據(jù)管理與應(yīng)用數(shù)據(jù)持久化(一)

    。 運(yùn)作機(jī)制 數(shù)據(jù)管理模塊包括用戶首選項(xiàng)、鍵值型數(shù)據(jù)管理、關(guān)系型數(shù)據(jù)管理分布式數(shù)據(jù)對(duì)象和跨應(yīng)用數(shù)據(jù)管理
    發(fā)表于 11-01 16:27

    HarmonyOS分布式數(shù)據(jù)管理三大核心技術(shù)是什么?

    隨著華為官方公布——將于 2021 年 4 月開放首批升級(jí)鴻蒙系統(tǒng),預(yù)計(jì)屆時(shí)將會(huì)涌現(xiàn)一大批鴻蒙學(xué)習(xí)者,那么你對(duì) HarmonyOS 分布式數(shù)據(jù)管理三大核心技術(shù)有多少了解呢? 這三大技術(shù)分別
    的頭像 發(fā)表于 03-14 10:54 ?5471次閱讀

    HarmonyOS分布式應(yīng)用上架問題分析

    HarmonyOS是新一代的智能終端操作系統(tǒng),給開發(fā)者提供了設(shè)備發(fā)現(xiàn)、設(shè)備連接、跨設(shè)備調(diào)用等豐富的分布式API。隨著越來越多的開發(fā)者投入到Harmo
    的頭像 發(fā)表于 12-24 17:56 ?1906次閱讀
    <b class='flag-5'>HarmonyOS</b><b class='flag-5'>分布式</b>應(yīng)用上架問題分析

    鴻蒙開發(fā)接口數(shù)據(jù)管理:【@ohos.data.distributedData (分布式數(shù)據(jù)管理)】

    分布式數(shù)據(jù)管理為應(yīng)用程序提供不同設(shè)備間數(shù)據(jù)庫(kù)的分布式協(xié)同能力。通過調(diào)用分布式數(shù)據(jù)各個(gè)接口,應(yīng)用程
    的頭像 發(fā)表于 06-07 09:30 ?962次閱讀
    鴻蒙<b class='flag-5'>開發(fā)</b>接口<b class='flag-5'>數(shù)據(jù)管理</b>:【@ohos.data.distributedData (<b class='flag-5'>分布式</b><b class='flag-5'>數(shù)據(jù)管理</b>)】
    主站蜘蛛池模板: 国产AV白丝爆浆在线播放| 99精品成人无码A片观看金桔| 快播可乐网| japanese from色系| 午夜福利免费0948视频| 九色PORNY真实丨首页| 18和谐综合色区| 熟女人妻水多爽中文字幕| 九九99热久久999精品| adc影院在线| 相声flash| 伦理片飘花手机在线| 俄罗斯17vidio| 野花日本大全免费观看3中文版| 麻豆COMCN| 国产成人国产在线观看入口| 一本道的mv中文字幕| 欧洲精品一区二区不卡观看| 国产性夜夜春夜夜爽1A片 | 日本大片免a费观看视频| 国产偷窥盗摄一区二区| 69式国产真人免费视频| 视频三区 国产盗摄| 久久电影精品久久99久久| 阿v天堂2017在无码| 亚洲精品国产在线网站| 女人张开腿让男人添| 国产亚洲视频在线观看| 99午夜视频| 亚洲色图19p| 日本 稀土矿| 久久re这里视频只有精品首页| 成人无码在线超碰视频| 一个人在线观看视频| 日韩在线av免费视久久| 久久影院毛片一区二区| 国产成人女人视频在线观看| 2023国产精品一卡2卡三卡4卡 | 国产成人免费观看| 最近最新的日本字幕MV| 午夜福利免费0948视频|