女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

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

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

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

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

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

介紹

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

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

效果預(yù)覽

image.png

使用說明 |

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

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

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

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

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

具體實現(xiàn)

管理kvStore

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

源碼:

/*

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

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

1、創(chuàng)建設(shè)備管理對象,并指定參數(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) => {})",從而對可信設(shè)備列表管理。

審核編輯 黃宇

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

    關(guān)注

    1

    文章

    310

    瀏覽量

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

    關(guān)注

    1

    文章

    976

    瀏覽量

    75145
  • HarmonyOS
    +關(guān)注

    關(guān)注

    79

    文章

    2027

    瀏覽量

    32076
  • OpenHarmony
    +關(guān)注

    關(guān)注

    26

    文章

    3816

    瀏覽量

    18090
收藏 人收藏

    評論

    相關(guān)推薦
    熱點推薦

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    HarmonyOS是新一代的智能終端操作系統(tǒng),給開發(fā)者提供了設(shè)備發(fā)現(xiàn)、設(shè)備連接、跨設(shè)備調(diào)用等豐富的分布式API。隨著越來越多的開發(fā)者投入到Harmo
    的頭像 發(fā)表于 12-24 17:56 ?2142次閱讀
    <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ù)庫的分布式協(xié)同能力。通過調(diào)用分布式數(shù)據(jù)各個接口,應(yīng)用程
    的頭像 發(fā)表于 06-07 09:30 ?1402次閱讀
    鴻蒙<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>)】