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

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

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

基于HarmonyOS的分鏡頭App開(kāi)發(fā)技術(shù)詳解

HarmonyOS開(kāi)發(fā)者 ? 來(lái)源:HarmonyOS開(kāi)發(fā)者 ? 作者:HarmonyOS ? 2021-08-26 17:59 ? 次閱讀

《分鏡頭App》的創(chuàng)作靈感來(lái)源于殷冬的日常觀察,他發(fā)現(xiàn)平常人們?cè)谧耘臅r(shí),往往會(huì)用前置攝像頭,由于像素、取景景別等因素的限制,前攝拍出來(lái)的效果往往不是很理想;此外,當(dāng)我們幫別人拍照時(shí),對(duì)方也無(wú)法實(shí)時(shí)看到照片的取景角度和構(gòu)圖,拍出來(lái)的照片也很難讓對(duì)方滿(mǎn)意;對(duì)于照片的分享和美化,更是眾口難調(diào)。為了解決這些痛點(diǎn),提升用戶(hù)的拍照體驗(yàn),經(jīng)過(guò)不斷摸索,殷冬發(fā)現(xiàn)HarmonyOS的分布式技術(shù)有著很大的應(yīng)用潛力。于是他基于HarmonyOS從0到1完成了《分鏡頭App》的開(kāi)發(fā)。

以下將為大家分享該款應(yīng)用的開(kāi)發(fā)者殷冬的開(kāi)發(fā)心得。

一,HarmonyOS技術(shù)使用

《分鏡頭App》主要用到了分布式文件服務(wù)、分布式硬件虛擬化、以及分布式數(shù)據(jù)服務(wù)。

分布式文件服務(wù)

利用分布式文件服務(wù),可以自動(dòng)同步其他設(shè)備拍攝的照片和視頻,實(shí)現(xiàn)分布式相冊(cè)功能。

起初殷冬以為分布式文件服務(wù)使用起來(lái)會(huì)很復(fù)雜,例如是否需要自己控制同步、初始化功能等等。而真正接觸后他發(fā)現(xiàn),在底層上,分布式文件服務(wù)已經(jīng)將復(fù)雜的工作都處理好了,只需用一行代碼,就可以使用分布式文件服務(wù),就相當(dāng)于調(diào)用本地文件系統(tǒng)一樣,只不過(guò)再繼續(xù)向下,底層會(huì)幫助開(kāi)發(fā)者處理很多業(yè)務(wù)。

c86e7baa-f3a8-11eb-9bcf-12bb97331649.png

分布式硬件虛擬化

分布式硬件虛擬化的特性,可以調(diào)用其他設(shè)備的硬件,實(shí)現(xiàn)相關(guān)的功能。在《分鏡頭App》中,調(diào)用其他設(shè)備的相機(jī)畫(huà)面,就用到了分布式硬件虛擬化。并且可以控制拍攝畫(huà)面的比例,實(shí)現(xiàn)不一樣的拍攝效果。

殷冬最初接觸硬件虛擬化這個(gè)概念的時(shí)候,只是知道是基于分布式軟總線(xiàn)實(shí)現(xiàn)的虛擬化,至于怎么使用,并不是很清楚,后來(lái)通過(guò)深入的學(xué)習(xí)發(fā)現(xiàn),主動(dòng)調(diào)用其他設(shè)備的接口,可以使用分布式任務(wù)調(diào)度或者IDL接口兩種方法實(shí)現(xiàn)。而分布式任務(wù)調(diào)度和IDL接口,都可以傳遞實(shí)現(xiàn)Sequenceable接口的實(shí)現(xiàn)類(lèi)對(duì)象。

而硬件功能關(guān)鍵類(lèi)都實(shí)現(xiàn)了Sequenceable接口,比如:相機(jī)預(yù)覽畫(huà)面的關(guān)鍵類(lèi)Surface,就實(shí)現(xiàn)了Sequenceable接口。因此可以通過(guò)IDL將設(shè)備A的Surface對(duì)象,以參數(shù)的形式,傳遞到設(shè)備B。設(shè)備B的Service Ability執(zhí)行相機(jī)初始化操作,就可以拿到設(shè)備B相機(jī)的拍攝畫(huà)面。

由此,就在代碼編輯層面實(shí)現(xiàn)了硬件虛擬化。

分布式數(shù)據(jù)服務(wù)

在《分鏡頭App》中,有很多的協(xié)同操作。協(xié)同操作的核心邏輯,利用了分布式數(shù)據(jù)服務(wù)的數(shù)據(jù)變更通知功能。當(dāng)一個(gè)設(shè)備觸發(fā)協(xié)同操作時(shí),通過(guò)變更通知,從設(shè)備觸發(fā)UI和效果的變化,實(shí)現(xiàn)分布式協(xié)同功能。

分布式數(shù)據(jù)服務(wù)有兩個(gè)功能,可以為開(kāi)發(fā)者帶來(lái)很大的便捷。第一個(gè)是多端數(shù)據(jù)同步功能,當(dāng)通過(guò)一個(gè)設(shè)備修改了數(shù)據(jù)庫(kù)中的數(shù)據(jù),其他設(shè)備也會(huì)做同步。第二個(gè)是在添加、修改、刪除數(shù)據(jù)庫(kù)數(shù)據(jù)時(shí),其他設(shè)備如果創(chuàng)建了數(shù)據(jù)庫(kù)的鏈接,并綁定了數(shù)據(jù)變更監(jiān)聽(tīng)時(shí),就會(huì)觸發(fā)該監(jiān)聽(tīng)。開(kāi)發(fā)者可以利用這兩個(gè)功能特性,做多端的協(xié)同功能。

數(shù)據(jù)庫(kù)初始化:

c8ac37d8-f3a8-11eb-9bcf-12bb97331649.png

數(shù)據(jù)庫(kù)變更監(jiān)聽(tīng):

c8df0d3e-f3a8-11eb-9bcf-12bb97331649.png

分布式相冊(cè)實(shí)現(xiàn)

相冊(cè)主要存儲(chǔ)圖片、視頻文件,可以使用分布式文件服務(wù)進(jìn)行存儲(chǔ)。此項(xiàng)功能殷冬還需要實(shí)現(xiàn)動(dòng)態(tài)添加的效果,即:其他設(shè)備拍攝時(shí),本機(jī)的相冊(cè)列表動(dòng)態(tài)顯示剛剛拍攝的照片縮略圖。這種效果可以在確定使用分布式文件服務(wù)存儲(chǔ)照片和視頻后,使用HarmonyOS的公共事件與通知功能,從而實(shí)現(xiàn)動(dòng)態(tài)加載的效果。

在拍攝完成時(shí),通過(guò)公共事件功能發(fā)送一條廣播。

同時(shí),在相冊(cè)模塊,注冊(cè)公共事件,用于處理接收到通知后的動(dòng)態(tài)添加縮略圖邏輯。

分布式文件服務(wù)負(fù)責(zé)同步拍攝的照片、視頻等信息,公共事件通知?jiǎng)t主動(dòng)進(jìn)行頁(yè)面的刷新,二者合用,實(shí)現(xiàn)動(dòng)態(tài)添加的效果。

二、多設(shè)備協(xié)同實(shí)現(xiàn)

目標(biāo)設(shè)備未打開(kāi)協(xié)同頁(yè)面問(wèn)題處理

多設(shè)備協(xié)同實(shí)際上有個(gè)隱藏的前提,那就是所有設(shè)備都處于同一個(gè)協(xié)同頁(yè)面中。這需要處理目標(biāo)設(shè)備不在協(xié)同頁(yè)面的問(wèn)題。

此時(shí)可以創(chuàng)建一個(gè)單版本分布式數(shù)據(jù)庫(kù),key值為設(shè)備id,value值為協(xié)同頁(yè)面是否啟動(dòng)true/false。當(dāng)進(jìn)入到協(xié)同頁(yè)面時(shí),在onStart方法中設(shè)置值為true。當(dāng)退出頁(yè)面時(shí),在onInactive方法中設(shè)置值為false。

在發(fā)起協(xié)同前,可以通過(guò)單版本分布式數(shù)據(jù)庫(kù),獲取到目標(biāo)設(shè)備是否啟動(dòng)了協(xié)同頁(yè)面。

如果沒(méi)有啟動(dòng),可以先通過(guò)abilitySlice.startAbility()將目標(biāo)設(shè)備拉起,進(jìn)入到協(xié)同頁(yè)面,然后再進(jìn)入?yún)f(xié)同狀態(tài)。

如果目標(biāo)設(shè)備已經(jīng)處于協(xié)同頁(yè)面,就可以直接進(jìn)入到協(xié)同狀態(tài)。

統(tǒng)一管理分布式操作

由于分布式數(shù)據(jù)服務(wù)每個(gè)應(yīng)用最多同時(shí)打開(kāi)16個(gè)KvStore,所以不能每一個(gè)協(xié)同操作都使用一個(gè)數(shù)據(jù)庫(kù)。這里可以在value值上做文章,以實(shí)現(xiàn)通過(guò)一個(gè)分布式數(shù)據(jù)庫(kù),就可以實(shí)現(xiàn)一個(gè)頁(yè)面中的多個(gè)操作的協(xié)同。

首先,可以使用一個(gè)常量作為分布式協(xié)同數(shù)據(jù)庫(kù)的key。每次put時(shí),都使用這個(gè)常量作為key,以替換之前的數(shù)據(jù)。

其次,需要?jiǎng)?chuàng)建一個(gè)實(shí)體類(lèi)。成員變量中,需要有兩個(gè)基礎(chǔ)變量:

operationType:int型,當(dāng)前協(xié)同操作的類(lèi)型;

targetDeviceId:List《String》,需要協(xié)同的設(shè)備id數(shù)組;

operationType字段主要是用來(lái)區(qū)分當(dāng)前的操作類(lèi)型,這樣方便調(diào)用相同的功能進(jìn)行協(xié)同操作。targetDeviceId主要是存儲(chǔ)向哪些設(shè)備發(fā)起協(xié)同操作,可以通過(guò)判斷本設(shè)備id是否在數(shù)組當(dāng)中,如果不存在,就不做任何操作。

此時(shí)需要將實(shí)體類(lèi)轉(zhuǎn)換成字符串,再存儲(chǔ)到分布式協(xié)同數(shù)據(jù)庫(kù)中。因此,可以通過(guò)JSONObject.toJSONString(),將實(shí)體類(lèi)轉(zhuǎn)換成字符串并進(jìn)行存儲(chǔ)。

被調(diào)用方需要為分布式數(shù)據(jù)庫(kù),綁定數(shù)據(jù)變更監(jiān)聽(tīng)。這樣,其他設(shè)備添加或修改數(shù)據(jù)的時(shí)候,就會(huì)觸發(fā)監(jiān)聽(tīng)。監(jiān)聽(tīng)類(lèi)型要設(shè)備其他設(shè)備觸發(fā)的變化,這樣可以避免本地修改也會(huì)觸發(fā)本地的監(jiān)聽(tīng)的問(wèn)題。

在監(jiān)聽(tīng)中就可以處理協(xié)同的功能。首先要判斷變更的數(shù)據(jù)是否為空,避免后續(xù)出錯(cuò)。然后可以將key的json值取出,并做非空判斷。

接下來(lái)需要將json字符串轉(zhuǎn)換成實(shí)體類(lèi),便于后續(xù)操作。這里可以使用JSONArray.parseObject(json, class)進(jìn)行轉(zhuǎn)換。

然后進(jìn)行判斷,是否需要本設(shè)備進(jìn)行協(xié)同。

當(dāng)本設(shè)備需要協(xié)同時(shí),可以通過(guò)switch根據(jù)操作類(lèi)型,調(diào)用不同的方法進(jìn)行協(xié)同即可。

總結(jié)

殷冬通過(guò)官方文檔、論壇、HarmonyOS技術(shù)社區(qū)等途徑,系統(tǒng)的學(xué)習(xí)和了解HarmonyOS的特性,最終開(kāi)發(fā)了本次大賽的《分鏡頭App》作品。未來(lái),他還將持續(xù)深入了解HarmonyOS,嘗試開(kāi)發(fā)更為有趣的HarmonyOS分布式應(yīng)用,也期待更多開(kāi)發(fā)者加入到HarmonyOS生態(tài),一起創(chuàng)造無(wú)限可能!

責(zé)任編輯:haq

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

    關(guān)注

    33

    文章

    1559

    瀏覽量

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

    關(guān)注

    1

    文章

    827

    瀏覽量

    74398
  • 鴻蒙系統(tǒng)
    +關(guān)注

    關(guān)注

    183

    文章

    2629

    瀏覽量

    65824
  • HarmonyOS
    +關(guān)注

    關(guān)注

    79

    文章

    1949

    瀏覽量

    29758

原文標(biāo)題:開(kāi)發(fā)者說(shuō): 分鏡頭App分布式開(kāi)發(fā)技術(shù)詳解

文章出處:【微信號(hào):HarmonyOS_Dev,微信公眾號(hào):HarmonyOS開(kāi)發(fā)者】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    PRU開(kāi)發(fā)詳解

    電子發(fā)燒友網(wǎng)站提供《PRU開(kāi)發(fā)詳解.pdf》資料免費(fèi)下載
    發(fā)表于 09-05 11:27 ?0次下載
    PRU<b class='flag-5'>開(kāi)發(fā)</b><b class='flag-5'>詳解</b>

    慶科信息獲HarmonyOS高級(jí)應(yīng)用開(kāi)發(fā)能力認(rèn)證!助力品牌快速打造鴻蒙原生應(yīng)用

    近日,上海慶科信息技術(shù)有限公司榮獲HarmonyOS應(yīng)用開(kāi)發(fā)者高級(jí)認(rèn)證,公司在華為鴻蒙生態(tài)的開(kāi)發(fā)能力得到進(jìn)一步拓展,能夠幫助客戶(hù)快速開(kāi)發(fā)基于
    的頭像 發(fā)表于 07-17 13:24 ?447次閱讀
    慶科信息獲<b class='flag-5'>HarmonyOS</b>高級(jí)應(yīng)用<b class='flag-5'>開(kāi)發(fā)</b>能力認(rèn)證!助力品牌快速打造鴻蒙原生應(yīng)用

    紅外熱成像設(shè)備光學(xué)鏡頭詳解

    紅外熱成像儀的工作原理詳解紅外熱成像設(shè)備的工作原理相當(dāng)直接且簡(jiǎn)潔。它的工作過(guò)程包括以下幾個(gè)關(guān)鍵步驟:紅外輻射的感知——紅外鏡頭紅外熱成像鏡頭的主要功能之一就是捕捉這些發(fā)出的紅外輻射。這是通過(guò)
    的頭像 發(fā)表于 06-13 12:13 ?312次閱讀
    紅外熱成像設(shè)備光學(xué)<b class='flag-5'>鏡頭</b><b class='flag-5'>詳解</b>

    涂鴉App開(kāi)發(fā)工具App SDK

    我們之前為大家介紹過(guò)涂鴉AppSDK的特點(diǎn)和優(yōu)勢(shì),在這一年多時(shí)間里,涂鴉成功幫助很多客戶(hù)實(shí)現(xiàn)了有創(chuàng)意的差異化開(kāi)發(fā),并構(gòu)筑更具核心競(jìng)爭(zhēng)力的品牌專(zhuān)屬App。什么是AppSDK?涂鴉AppSDK是專(zhuān)為物
    的頭像 發(fā)表于 05-24 08:15 ?569次閱讀
    涂鴉<b class='flag-5'>App</b><b class='flag-5'>開(kāi)發(fā)</b>工具<b class='flag-5'>App</b> SDK

    華為HarmonyOS Next支持企業(yè)應(yīng)用安裝,無(wú)須App Store審核

    華為宣布推出HarmonyOS開(kāi)發(fā)者指南,明確表示開(kāi)發(fā)人員可以利用專(zhuān)用的內(nèi)部發(fā)行證書(shū)和Profile編譯打包其應(yīng)用,然后將應(yīng)用包及其描述文件上傳至服務(wù)器或第三方云端,供用戶(hù)直接下載安裝。
    的頭像 發(fā)表于 05-18 11:44 ?639次閱讀

    HarmonyOS開(kāi)發(fā)案例:【購(gòu)物車(chē)app

    OpenHarmony ArkUI框架提供了豐富的動(dòng)畫(huà)組件和接口,開(kāi)發(fā)者可以根據(jù)實(shí)際場(chǎng)景和開(kāi)發(fā)需求,選用豐富的動(dòng)畫(huà)組件和接口來(lái)實(shí)現(xiàn)不同的動(dòng)畫(huà)效果。
    的頭像 發(fā)表于 05-14 18:19 ?902次閱讀
    <b class='flag-5'>HarmonyOS</b><b class='flag-5'>開(kāi)發(fā)</b>案例:【購(gòu)物車(chē)<b class='flag-5'>app</b>】

    HarmonyOS開(kāi)發(fā)技術(shù)全面分析

    的快速連接、能力互助、資源共享,匹配合適的設(shè)備、提供流暢的全場(chǎng)景體驗(yàn)。 ? 對(duì)應(yīng)用開(kāi)發(fā)者而言, HarmonyOS 采用了多種分布式技術(shù),使得應(yīng)用程序的開(kāi)發(fā)實(shí)現(xiàn)與不同終端設(shè)備的形態(tài)差異
    發(fā)表于 02-21 16:31

    淘寶與華為合作將基于HarmonyOS NEXT啟動(dòng)鴻蒙原生應(yīng)用開(kāi)發(fā)

    1月25日,淘寶與華為舉辦鴻蒙合作簽約儀式,宣布將基于HarmonyOS NEXT啟動(dòng)鴻蒙原生應(yīng)用開(kāi)發(fā)
    的頭像 發(fā)表于 01-26 16:14 ?890次閱讀

    免費(fèi)學(xué)習(xí)鴻蒙(HarmonyOS開(kāi)發(fā),一些地址分享

    國(guó)內(nèi)一流高校。通過(guò)鴻蒙班的設(shè)立,高??梢詾閷W(xué)生提供專(zhuān)業(yè)的鴻蒙OS學(xué)習(xí)環(huán)境和豐富的實(shí)踐機(jī)會(huì),培養(yǎng)出更多的鴻蒙開(kāi)發(fā)人才,為鴻蒙OS系統(tǒng)的生態(tài)建設(shè)做出貢獻(xiàn)。 其中南京大學(xué)已經(jīng)將HarmonyOS作為《移動(dòng)
    發(fā)表于 01-12 20:48

    持續(xù)構(gòu)建行業(yè)影響力|HarmonyOS SDK榮膺年度“技術(shù)卓越”獎(jiǎng)項(xiàng)

    應(yīng)用,和開(kāi)發(fā)者共同成長(zhǎng)。 通過(guò)在開(kāi)發(fā)者社區(qū)和 HarmonyOS 開(kāi)發(fā)者持續(xù)的內(nèi)容共創(chuàng)與技術(shù)交流互動(dòng),
    發(fā)表于 01-12 09:33

    HarmonyOS應(yīng)用性能與功耗云測(cè)試

    Phone 和 TV 設(shè)備,包格式包括 Hap/App。 前提條件 ● 已注冊(cè)華為開(kāi)發(fā)者帳號(hào),并完成實(shí)名認(rèn)證,具體請(qǐng)參考帳號(hào)注冊(cè)和實(shí)名認(rèn)證。 ● 已通過(guò) DevEco Studio 開(kāi)發(fā)完應(yīng)用,并編譯構(gòu)建
    發(fā)表于 12-26 16:39

    HarmonyOS鴻蒙原生應(yīng)用開(kāi)發(fā)設(shè)計(jì)- 華為分享圖標(biāo)

    HarmonyOS設(shè)計(jì)文檔中,為大家提供了獨(dú)特的華為分享圖標(biāo),開(kāi)發(fā)者可以根據(jù)需要直接引用。 開(kāi)發(fā)者直接使用官方提供的華為分享圖標(biāo)內(nèi)容,既可以符合HarmonyOS原生應(yīng)用的
    發(fā)表于 10-25 14:28

    HarmonyOS鴻蒙原生應(yīng)用開(kāi)發(fā)設(shè)計(jì)- HarmonyOS Sans 字體

    HarmonyOS設(shè)計(jì)文檔中,為大家提供了獨(dú)特的字體,開(kāi)發(fā)者可以根據(jù)需要直接引用。 開(kāi)發(fā)者直接使用官方提供的字體內(nèi)容,既可以符合HarmonyOS原生應(yīng)用的
    發(fā)表于 10-23 16:12

    HarmonyOS資料下載專(zhuān)題

    HarmonyOS資料下載專(zhuān)題:從鴻蒙出世到現(xiàn)在,對(duì)于鴻蒙資料查詢(xún)下載,大家是否有點(diǎn)迷茫-不知去何處查找。為此,本專(zhuān)題匯集了HarmonyOS從入門(mén)到精通的各種開(kāi)發(fā)資料,內(nèi)容包括:設(shè)計(jì)參考、程序源碼、
    發(fā)表于 10-08 14:23
    <b class='flag-5'>HarmonyOS</b>資料下載專(zhuān)題