《分鏡頭App》的創(chuàng)作靈感來源于殷冬的日常觀察,他發(fā)現(xiàn)平常人們在自拍時,往往會用前置攝像頭,由于像素、取景景別等因素的限制,前攝拍出來的效果往往不是很理想;此外,當我們幫別人拍照時,對方也無法實時看到照片的取景角度和構圖,拍出來的照片也很難讓對方滿意;對于照片的分享和美化,更是眾口難調(diào)。為了解決這些痛點,提升用戶的拍照體驗,經(jīng)過不斷摸索,殷冬發(fā)現(xiàn)HarmonyOS的分布式技術有著很大的應用潛力。于是他基于HarmonyOS從0到1完成了《分鏡頭App》的開發(fā)。
以下將為大家分享該款應用的開發(fā)者殷冬的開發(fā)心得。
一,HarmonyOS技術使用
《分鏡頭App》主要用到了分布式文件服務、分布式硬件虛擬化、以及分布式數(shù)據(jù)服務。
分布式文件服務
利用分布式文件服務,可以自動同步其他設備拍攝的照片和視頻,實現(xiàn)分布式相冊功能。
起初殷冬以為分布式文件服務使用起來會很復雜,例如是否需要自己控制同步、初始化功能等等。而真正接觸后他發(fā)現(xiàn),在底層上,分布式文件服務已經(jīng)將復雜的工作都處理好了,只需用一行代碼,就可以使用分布式文件服務,就相當于調(diào)用本地文件系統(tǒng)一樣,只不過再繼續(xù)向下,底層會幫助開發(fā)者處理很多業(yè)務。

分布式硬件虛擬化
分布式硬件虛擬化的特性,可以調(diào)用其他設備的硬件,實現(xiàn)相關的功能。在《分鏡頭App》中,調(diào)用其他設備的相機畫面,就用到了分布式硬件虛擬化。并且可以控制拍攝畫面的比例,實現(xiàn)不一樣的拍攝效果。
殷冬最初接觸硬件虛擬化這個概念的時候,只是知道是基于分布式軟總線實現(xiàn)的虛擬化,至于怎么使用,并不是很清楚,后來通過深入的學習發(fā)現(xiàn),主動調(diào)用其他設備的接口,可以使用分布式任務調(diào)度或者IDL接口兩種方法實現(xiàn)。而分布式任務調(diào)度和IDL接口,都可以傳遞實現(xiàn)Sequenceable接口的實現(xiàn)類對象。
而硬件功能關鍵類都實現(xiàn)了Sequenceable接口,比如:相機預覽畫面的關鍵類Surface,就實現(xiàn)了Sequenceable接口。因此可以通過IDL將設備A的Surface對象,以參數(shù)的形式,傳遞到設備B。設備B的Service Ability執(zhí)行相機初始化操作,就可以拿到設備B相機的拍攝畫面。
由此,就在代碼編輯層面實現(xiàn)了硬件虛擬化。
分布式數(shù)據(jù)服務
在《分鏡頭App》中,有很多的協(xié)同操作。協(xié)同操作的核心邏輯,利用了分布式數(shù)據(jù)服務的數(shù)據(jù)變更通知功能。當一個設備觸發(fā)協(xié)同操作時,通過變更通知,從設備觸發(fā)UI和效果的變化,實現(xiàn)分布式協(xié)同功能。
分布式數(shù)據(jù)服務有兩個功能,可以為開發(fā)者帶來很大的便捷。第一個是多端數(shù)據(jù)同步功能,當通過一個設備修改了數(shù)據(jù)庫中的數(shù)據(jù),其他設備也會做同步。第二個是在添加、修改、刪除數(shù)據(jù)庫數(shù)據(jù)時,其他設備如果創(chuàng)建了數(shù)據(jù)庫的鏈接,并綁定了數(shù)據(jù)變更監(jiān)聽時,就會觸發(fā)該監(jiān)聽。開發(fā)者可以利用這兩個功能特性,做多端的協(xié)同功能。
數(shù)據(jù)庫初始化:

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

分布式相冊實現(xiàn)
相冊主要存儲圖片、視頻文件,可以使用分布式文件服務進行存儲。此項功能殷冬還需要實現(xiàn)動態(tài)添加的效果,即:其他設備拍攝時,本機的相冊列表動態(tài)顯示剛剛拍攝的照片縮略圖。這種效果可以在確定使用分布式文件服務存儲照片和視頻后,使用HarmonyOS的公共事件與通知功能,從而實現(xiàn)動態(tài)加載的效果。
在拍攝完成時,通過公共事件功能發(fā)送一條廣播。
同時,在相冊模塊,注冊公共事件,用于處理接收到通知后的動態(tài)添加縮略圖邏輯。
分布式文件服務負責同步拍攝的照片、視頻等信息,公共事件通知則主動進行頁面的刷新,二者合用,實現(xiàn)動態(tài)添加的效果。
二、多設備協(xié)同實現(xiàn)
目標設備未打開協(xié)同頁面問題處理
多設備協(xié)同實際上有個隱藏的前提,那就是所有設備都處于同一個協(xié)同頁面中。這需要處理目標設備不在協(xié)同頁面的問題。
此時可以創(chuàng)建一個單版本分布式數(shù)據(jù)庫,key值為設備id,value值為協(xié)同頁面是否啟動true/false。當進入到協(xié)同頁面時,在onStart方法中設置值為true。當退出頁面時,在onInactive方法中設置值為false。
在發(fā)起協(xié)同前,可以通過單版本分布式數(shù)據(jù)庫,獲取到目標設備是否啟動了協(xié)同頁面。
如果沒有啟動,可以先通過abilitySlice.startAbility()將目標設備拉起,進入到協(xié)同頁面,然后再進入?yún)f(xié)同狀態(tài)。
如果目標設備已經(jīng)處于協(xié)同頁面,就可以直接進入到協(xié)同狀態(tài)。
統(tǒng)一管理分布式操作
由于分布式數(shù)據(jù)服務每個應用最多同時打開16個KvStore,所以不能每一個協(xié)同操作都使用一個數(shù)據(jù)庫。這里可以在value值上做文章,以實現(xiàn)通過一個分布式數(shù)據(jù)庫,就可以實現(xiàn)一個頁面中的多個操作的協(xié)同。
首先,可以使用一個常量作為分布式協(xié)同數(shù)據(jù)庫的key。每次put時,都使用這個常量作為key,以替換之前的數(shù)據(jù)。
其次,需要創(chuàng)建一個實體類。成員變量中,需要有兩個基礎變量:
operationType:int型,當前協(xié)同操作的類型;
targetDeviceId:List《String》,需要協(xié)同的設備id數(shù)組;
operationType字段主要是用來區(qū)分當前的操作類型,這樣方便調(diào)用相同的功能進行協(xié)同操作。targetDeviceId主要是存儲向哪些設備發(fā)起協(xié)同操作,可以通過判斷本設備id是否在數(shù)組當中,如果不存在,就不做任何操作。
此時需要將實體類轉(zhuǎn)換成字符串,再存儲到分布式協(xié)同數(shù)據(jù)庫中。因此,可以通過JSONObject.toJSONString(),將實體類轉(zhuǎn)換成字符串并進行存儲。
被調(diào)用方需要為分布式數(shù)據(jù)庫,綁定數(shù)據(jù)變更監(jiān)聽。這樣,其他設備添加或修改數(shù)據(jù)的時候,就會觸發(fā)監(jiān)聽。監(jiān)聽類型要設備其他設備觸發(fā)的變化,這樣可以避免本地修改也會觸發(fā)本地的監(jiān)聽的問題。
在監(jiān)聽中就可以處理協(xié)同的功能。首先要判斷變更的數(shù)據(jù)是否為空,避免后續(xù)出錯。然后可以將key的json值取出,并做非空判斷。
接下來需要將json字符串轉(zhuǎn)換成實體類,便于后續(xù)操作。這里可以使用JSONArray.parseObject(json, class)進行轉(zhuǎn)換。
然后進行判斷,是否需要本設備進行協(xié)同。
當本設備需要協(xié)同時,可以通過switch根據(jù)操作類型,調(diào)用不同的方法進行協(xié)同即可。
總結
殷冬通過官方文檔、論壇、HarmonyOS技術社區(qū)等途徑,系統(tǒng)的學習和了解HarmonyOS的特性,最終開發(fā)了本次大賽的《分鏡頭App》作品。未來,他還將持續(xù)深入了解HarmonyOS,嘗試開發(fā)更為有趣的HarmonyOS分布式應用,也期待更多開發(fā)者加入到HarmonyOS生態(tài),一起創(chuàng)造無限可能!
責任編輯:haq
-
APP
+關注
關注
33文章
1592瀏覽量
76003 -
分布式
+關注
關注
1文章
1094瀏覽量
76586 -
鴻蒙系統(tǒng)
+關注
關注
183文章
2642瀏覽量
69871 -
HarmonyOS
+關注
關注
80文章
2153瀏覽量
36072
原文標題:開發(fā)者說: 分鏡頭App分布式開發(fā)技術詳解
文章出處:【微信號:HarmonyOS_Dev,微信公眾號:HarmonyOS開發(fā)者】歡迎添加關注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
工業(yè)鏡頭的最大兼容CCD尺寸詳解
QCon·上海站HarmonyOS開發(fā)者技術分論壇:共探鴻蒙開發(fā)新機遇
HarmonyOS折疊屏鏡頭切換應用實踐
【HarmonyOS 5】鴻蒙應用隱私保護詳解
【HarmonyOS 5】鴻蒙中進度條的使用詳解
【HarmonyOS 5】鴻蒙星閃NearLink詳解
【HarmonyOS 5】鴻蒙mPaaS詳解
【HarmonyOS 5】金融應用開發(fā)鴻蒙組件實踐
【HarmonyOS 5】鴻蒙中的UIAbility詳解(二)
HarmonyOS 代碼工坊的指尖開發(fā),讓 APP 開發(fā)所見即所得
【HarmonyOS 5】桌面快捷方式功能實現(xiàn)詳解
【HarmonyOS 5】VisionKit人臉活體檢測詳解
基于HarmonyOS的分鏡頭App開發(fā)技術詳解
評論