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

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

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

原子化服務(wù)的官方解析來啦~

話說科技 ? 來源:話說科技 ? 作者:話說科技 ? 2021-08-30 14:26 ? 次閱讀

一直關(guān)注我們的小伙伴們肯定聽說過“原子化服務(wù)”了,可能有些小伙伴還聽說過“元服務(wù)”。元服務(wù),其實(shí)就是原子化服務(wù)。那么原子化服務(wù)到底是什么,權(quán)威的官方解析來啦~

一、原子化服務(wù)是什么?

我們?nèi)粘I钪幸呀?jīng)習(xí)慣了應(yīng)用的概念,而原子化服務(wù)是HarmonyOS面向未來提供的一種用戶程序形態(tài)。為什么需要一種新的用戶程序形態(tài)呢?

傳統(tǒng)的應(yīng)用是以設(shè)備為中心,使用前必須手動(dòng)安裝應(yīng)用,這樣導(dǎo)致應(yīng)用像生了根一樣,牢牢的固定在某個(gè)設(shè)備上。而在萬物互聯(lián)的時(shí)代,人均持有設(shè)備量不斷攀升,設(shè)備和場景的多樣性,每個(gè)設(shè)備都需要獨(dú)立開發(fā)一個(gè)應(yīng)用,先安裝后使用、不同設(shè)備的能力不兼容等傳統(tǒng)應(yīng)用的短板逐步暴露出來。在此背景下,應(yīng)用提供方和用戶都迫切需要一種新的服務(wù)提供方式,使應(yīng)用開發(fā)更簡單、服務(wù)(如聽音樂、打車等)的獲取和使用更便捷,原子化服務(wù)也就此誕生。

那么原子化服務(wù)到底是什么呢?

原子化服務(wù)是HarmonyOS提供的一種面向未來的服務(wù)方式,是有獨(dú)立入口的(用戶可通過點(diǎn)擊方式直接觸發(fā))、免安裝的(無需顯式安裝,由系統(tǒng)后臺(tái)安裝后即可使用)、可為用戶提供一個(gè)或多個(gè)便捷服務(wù)的用戶應(yīng)用程序形態(tài)。

例如:傳統(tǒng)方式的購物應(yīng)用,在按照原子化服務(wù)理念調(diào)整設(shè)計(jì)后,可以由多個(gè)服務(wù)直達(dá)、免安裝的原子化服務(wù)實(shí)現(xiàn),比如“商品瀏覽”、“購物車”、“支付”等。

a08b87d6277f9e2f355f02f4abbeee2db999f37f.jpeg?token=c7b5622f1db475a8c7d3afcfd6eb5149

帶您體驗(yàn)原子化服務(wù)

下面讓我?guī)w驗(yàn)一下原子化服務(wù),幫助大家更好地了解原子化服務(wù)到底是什么樣的。

2.1多種入口

我們可以通過多種方式發(fā)現(xiàn)原子化服務(wù):

一種為NFC標(biāo)簽,另一種為多功能碼。NFC標(biāo)簽為物理打印標(biāo)簽,支持手機(jī)碰一碰使用相應(yīng)服務(wù)。多功能碼可以為物理打印的標(biāo)簽,支持手機(jī)碰一碰及掃一掃使用相應(yīng)服務(wù),也可以為屏幕上呈現(xiàn)的電子標(biāo)簽,支持掃一掃。多功能碼有兩種樣式,分別用于跨設(shè)備體驗(yàn)和三方服務(wù)。

2.用戶也可以在設(shè)備的服務(wù)中心、桌面等地方發(fā)現(xiàn)并管理原子化服務(wù)。

342ac65c10385343a407f8f3219db777c88088ab.jpeg?token=10192c9918635900bf27601b7d1814e1

3.原子化服務(wù)可以基于合適場景被主動(dòng)推薦給用戶使用;用戶也可以在服務(wù)中心和小藝建議中發(fā)現(xiàn)系統(tǒng)推薦的服務(wù)。

說明:“小藝”是語音助手在華為設(shè)備中的名字。小藝可以回答用戶的問題、控制家居設(shè)備、執(zhí)行用戶的日常任務(wù)等;而且,小藝可以通過不同設(shè)備感知用戶的使用場景,推薦用戶可能需要的服務(wù)。

2.2服務(wù)卡片

與傳統(tǒng)應(yīng)用不同,原子化服務(wù)在設(shè)備桌面沒有應(yīng)用圖標(biāo),是通過服務(wù)卡片的形式將重要信息展示在服務(wù)中心或者桌面。用戶點(diǎn)擊服務(wù)卡片,即可進(jìn)入原子化服務(wù)的服務(wù)界面。

服務(wù)卡片的核心理念在于提供用戶容易使用且一目了然的信息內(nèi)容,將智慧化能力融入到服務(wù)卡片的體驗(yàn)中供用戶選擇使用,同時(shí)滿足在不同終端設(shè)備上的展示和自適應(yīng)。

91529822720e0cf3b346671cb3c8f516bf09aa3f.jpeg?token=991d23a1cbcf02cc1d8100b39752cbb1

值得注意的是,原子化服務(wù)和HarmonyOS應(yīng)用都支持服務(wù)卡片。對(duì)于原子化服務(wù),服務(wù)卡片是必選的,每個(gè)原子化服務(wù)至少有一個(gè)服務(wù)卡片。而對(duì)于HarmonyOS應(yīng)用,服務(wù)卡片是可選配置。

說明:HarmonyOS應(yīng)用,即運(yùn)行在HarmonyOS系統(tǒng)上且具備HarmonyOS特性的應(yīng)用。

2.3服務(wù)流轉(zhuǎn)

原子化服務(wù)支持運(yùn)行在1+8+N設(shè)備上。

“1”代表手機(jī)

“8”代表平板、智慧屏、音箱、眼鏡、手表、車機(jī)、耳機(jī)、PC

“N”代表運(yùn)動(dòng)健康、智能家居、智慧出行、智慧辦公、影音娛樂等場景延伸的泛IoT設(shè)備。

原子化服務(wù)的流轉(zhuǎn)能力打破設(shè)備界限,多設(shè)備聯(lián)動(dòng),使原子化服務(wù)可分可合、可流轉(zhuǎn),實(shí)現(xiàn)如郵件跨設(shè)備編輯、多設(shè)備協(xié)同健身、多屏游戲等分布式業(yè)務(wù)。

原子化服務(wù)的流轉(zhuǎn)觸發(fā)方式有兩種:系統(tǒng)推薦流轉(zhuǎn)和用戶手動(dòng)流轉(zhuǎn)。

①系統(tǒng)推薦流轉(zhuǎn):用戶使用原子化服務(wù)時(shí),如果所處環(huán)境中存在使用體驗(yàn)更優(yōu)的可選設(shè)備,則系統(tǒng)自動(dòng)為用戶推薦該設(shè)備,用戶可確認(rèn)是否啟動(dòng)流轉(zhuǎn)。

0e2442a7d933c895851c71da629d74f98302004c.jpeg?token=3abd355c7b7c5d69cbcb582bd8ab0cf5

②用戶手動(dòng)流轉(zhuǎn):用戶可以手動(dòng)選擇合適的設(shè)備進(jìn)行流轉(zhuǎn)。用戶點(diǎn)擊圖標(biāo)后,會(huì)調(diào)起系統(tǒng)提供的流轉(zhuǎn)面板。面板中會(huì)展示出原子化服務(wù)的信息及可流轉(zhuǎn)的設(shè)備,引導(dǎo)用戶進(jìn)行后續(xù)的流轉(zhuǎn)操作。

d62a6059252dd42a06f852bbb4b55cbcc8eab840.jpeg?token=006080ac711106e33c2f58197f32b4d8

2.4服務(wù)分享

原子化服務(wù)所提供的便捷服務(wù),可以通過接入華為分享實(shí)現(xiàn)近距離快速分享,使便捷服務(wù)可以精準(zhǔn)快速的推送至接收方,降低用戶觸達(dá)服務(wù)的成本,提升用戶體驗(yàn)。相比于傳統(tǒng)的社交軟件分享,分享雙方無需建立好友關(guān)系,接收方無需提前安裝承載服務(wù)的安裝包,即可享受原生的服務(wù)體驗(yàn)。

用戶可在原子化服務(wù)內(nèi)選擇分享,打開“華為分享”開關(guān)后,將原子化服務(wù)分享給附近同樣打開了“華為分享”開關(guān)的好友,好友點(diǎn)擊確認(rèn)后直接啟動(dòng)服務(wù)。下圖是通過“華為分享”分享購物類原子化服務(wù)的典型場景。

a1ec08fa513d269737873e24ef75b5f24216d88e.jpeg?token=99d81e60e047ddcf8dccfc57a71477d9

原子化服務(wù)的優(yōu)勢(shì)在哪里?

3.1一次開發(fā),多端部署

對(duì)于開發(fā)者而言,原子化服務(wù)只需開發(fā)一次,便可以部署在各種HarmonyOS終端上,大大降低了開發(fā)成本。

對(duì)于傳統(tǒng)的APP軟件開發(fā)者來說,一個(gè)繞不開的煩惱就是同一個(gè)APP需要分別針對(duì)不同的設(shè)備進(jìn)行適配。比如程序員在手機(jī)上開發(fā)了一款應(yīng)用,針對(duì)手表需要重新適配、發(fā)布到手表的應(yīng)用市場;針對(duì)大屏適配后,再發(fā)布到大屏的應(yīng)用市場,嚴(yán)重影響了應(yīng)用的開發(fā)效率和變現(xiàn)能力。

HarmonyOS在架構(gòu)設(shè)計(jì)之初,就提出了一次構(gòu)建支持多端部署的架構(gòu)設(shè)計(jì)原則。HarmonyOS通過提供用戶程序框架、Ability框架以及UI框架,能夠保證開發(fā)的應(yīng)用在多終端運(yùn)行時(shí)保證一致性。多終端軟件平臺(tái)API具備一致性,確保用戶程序的運(yùn)行兼容性。如此一來,開發(fā)者僅需為不同形態(tài)的設(shè)備配置不同參數(shù),IDE就能夠自動(dòng)生成支持多設(shè)備分發(fā)的APP包。APP包上架應(yīng)用市場后,應(yīng)用市場會(huì)自動(dòng)按照設(shè)備類型進(jìn)行HAP包的拆分、組裝和分發(fā),進(jìn)而端到端實(shí)現(xiàn)了一次開發(fā),支持多端部署的設(shè)計(jì)。

9922720e0cf3d7ca287823454c91b9006a63a98a.jpeg?token=84c3ef3abe1bdd88318918f86e7da4d6

具體流程如下:

1. 開發(fā)階段,IDE基于包格式編譯打包支持多設(shè)備的應(yīng)用包。

2. 上架到應(yīng)用市場。

3. 在云側(cè)對(duì)App進(jìn)行拆包,部署到CDN(Content Delivery Network,內(nèi)容分發(fā)網(wǎng)絡(luò)),包信息同步到服務(wù)分發(fā)中心。

4. 端側(cè)運(yùn)行過程中,根據(jù)自身設(shè)備類型獲取相應(yīng)的HAP及整體摘要信息。

3.2免安裝,秒級(jí)打開

消費(fèi)者不感知安裝過程和卸載過程,體驗(yàn)全新升級(jí)。

HarmonyOS 原子化服務(wù)是輕量化服務(wù)的新物種,它提供了全新的服務(wù)和交互方式。用戶在使用原子化服務(wù)時(shí),如果服務(wù)未部署,系統(tǒng)將通過云端自動(dòng)部署服務(wù),部署成功后即可使用對(duì)應(yīng)服務(wù)。例如,在服務(wù)中心點(diǎn)擊服務(wù)卡片,原子化服務(wù)通過免安裝能力完成部署和運(yùn)行,實(shí)現(xiàn)服務(wù)直達(dá)的業(yè)務(wù)體驗(yàn)。無須用戶跳轉(zhuǎn)到傳統(tǒng)的應(yīng)用分發(fā)市場,搜索下載目標(biāo)應(yīng)用,使得在設(shè)備上部署應(yīng)用更加快速。

隨著分布式場景生態(tài)的豐富,原子化服務(wù)要始終以人為中心,在不同設(shè)備間流轉(zhuǎn)。當(dāng)用戶走到大屏設(shè)備前,手機(jī)上的視頻電話可以流轉(zhuǎn)到大屏溝通,當(dāng)用戶走到電腦前,手機(jī)和電腦可以協(xié)同辦公,原子化服務(wù)能夠在不干擾用戶的情況下完成了自動(dòng)部署,同時(shí),系統(tǒng)會(huì)智能地清理已部署的低頻服務(wù)。

這就是原子化服務(wù)的免安裝能力,一方面提升開發(fā)者上架應(yīng)用的分發(fā)效率和轉(zhuǎn)化率,一方面提升消費(fèi)者的服務(wù)體驗(yàn),減少安裝過程對(duì)用戶的干擾。

3.3以人為中心,分布式流轉(zhuǎn)

分布式流轉(zhuǎn)是實(shí)現(xiàn)原子化服務(wù)以人為中心的核心技術(shù)。

隨著5G和IoT設(shè)備的發(fā)展,個(gè)人擁有了多個(gè)智能設(shè)備也逐步成為主流場景。手機(jī)、筆記本、PAD、電視、運(yùn)動(dòng)手表、耳機(jī)、冰箱、抽油煙機(jī)、智能門鎖等這類智能設(shè)備在搭載HarmonyOS系統(tǒng)后,通過分布式軟總線連接起來,就可以形成一個(gè)超級(jí)的終端。不同的設(shè)備之間,通過重新業(yè)務(wù)組合,可以形成新的用戶體驗(yàn)。

例如:用戶坐在書桌前用手機(jī)觀看視頻,又希望轉(zhuǎn)移到客廳,坐在沙發(fā)上用大屏繼續(xù)視頻的觀看。業(yè)界大多采用投屏的方案實(shí)現(xiàn),如DLNA、Cast+等。而原子化服務(wù)采用的分布式組件流轉(zhuǎn)的技術(shù),簡單來講,就是HarmonyOS系統(tǒng)管理著原子化服務(wù)進(jìn)程實(shí)體的上下文環(huán)境(打開的文件句柄,硬件,運(yùn)行狀態(tài)),并對(duì)上下文數(shù)據(jù)進(jìn)行跨設(shè)備的備份、傳輸和恢復(fù)。如下圖示意:

4a36acaf2edda3ccaaf36c1cbb673e08213f920b.jpeg?token=9010e43cb0dd2e6a6fa1348249396844

對(duì)于用戶來說,流轉(zhuǎn)操作應(yīng)當(dāng)是便捷的,高效的,無副作用的。用戶可以進(jìn)行反復(fù)流轉(zhuǎn),應(yīng)用實(shí)體能夠始終維持其狀態(tài)。為了保證用戶交互的一致性,流轉(zhuǎn)的入口由系統(tǒng)統(tǒng)一提供。對(duì)于應(yīng)用程序的一致性,由開發(fā)者維護(hù)。例如:當(dāng)應(yīng)用從手機(jī)遷移到大屏之后,其控件、樣式、布局等方面應(yīng)當(dāng)盡可能保持一致。但“一致”不意味著“一樣”:針對(duì)手機(jī),平板電腦或者大屏各自屏幕的特征,其用戶界面應(yīng)當(dāng)做好相應(yīng)的適配。

3.4對(duì)比App Clips和小程序,有什么優(yōu)勢(shì)?

App Clips和小程序本質(zhì)上都是針對(duì)服務(wù)線上化、交易閉環(huán)的場景在定義產(chǎn)品,天然追求隨處可及和服務(wù)直達(dá)的特性。原子化服務(wù)與之相比,有以下優(yōu)勢(shì):

1. 原子化服務(wù)是面向未來超級(jí)終端的服務(wù)形態(tài),覆蓋更廣泛的IoT設(shè)備,具備1+8+N設(shè)備兼容的API接口,這也是原子化服務(wù)相比APP Clips和小程序更具競爭力的根基。

2. 原子化服務(wù)是基于分布式全場景體驗(yàn)?zāi)繕?biāo)而設(shè)計(jì)的,也是與App Clips和小程序在設(shè)計(jì)理念上的最大不同。HarmonyOS提供了超強(qiáng)的分布式能力,能夠讓開發(fā)者快速實(shí)現(xiàn)一個(gè)分布式業(yè)務(wù)。

3. 原子化服務(wù)有服務(wù)中心、碰一碰、掃一掃、卡片分享、流轉(zhuǎn)業(yè)務(wù)觸發(fā)等相比App Clips和小程序更為豐富的入口, 支持服務(wù)快速直達(dá)。

如何開發(fā)原子化服務(wù)?

相信很多的開發(fā)者小伙伴們更為關(guān)注的是如何開發(fā)原子化服務(wù),下面我們就來介紹。

4.1總體開發(fā)要求

1. 原子化服務(wù)的所有HAP包均需要滿足免安裝要求。

2. 免安裝的HAP包不能超過10MB。

3. 原子化服務(wù)升級(jí)時(shí),新版本也要保持免安裝屬性。

4. 目前支持免安裝的HAP的設(shè)備類型有:手機(jī)、平板、智慧屏、智能穿戴,版本均需要在HarmonyOS 2版本及以上。

5. 原子化服務(wù)如果要在服務(wù)中心露出,則需要滿足:

該服務(wù)對(duì)應(yīng)的HAP包需要包含F(xiàn)A,且指定唯一的一個(gè)“MainAbility”作為用戶操作入口。

需要配置一個(gè)小尺寸服務(wù)卡片(2*2規(guī)格),以及配置基礎(chǔ)信息:如圖標(biāo)、名稱、描述、快照等。

原子化服務(wù)的詳細(xì)設(shè)計(jì)說明,可以參考官網(wǎng):

https://developer.harmonyos.com/cn/docs/design/des-guides/service-overview-0000001139795693

4.2開發(fā)工具

HUAWEI DevEco Studio(以下簡稱DevEco Studio)是基于IntelliJ IDEA Community開源版本打造,面向華為終端全場景多設(shè)備的一站式集成開發(fā)環(huán)境(IDE),為開發(fā)者提供工程模板創(chuàng)建、開發(fā)、編譯、調(diào)試、發(fā)布等E2E的HarmonyOS應(yīng)用開發(fā)服務(wù)。

DevEco Studio下載鏈接:

https://developer.harmonyos.com/cn/develop/deveco-studio#download

我們使用DevEco Studio工具來開發(fā)原子化服務(wù)。該工具的詳細(xì)使用說明,可以參考官網(wǎng):

https://developer.harmonyos.com/cn/docs/documentation/doc-guides/tools_overview-0000001053582387

4.3開發(fā)過程及注意點(diǎn)

1. 創(chuàng)建工程

(1) 運(yùn)行DevEco Studio工具,在菜單欄選擇File > New > New Project。

(2) 根據(jù)工程創(chuàng)建向?qū)Вx擇需要的Ability工程模板,然后點(diǎn)擊Next。

(3) 配置工程的基本信息。

11385343fbf2b2116058070a790e62310dd78e9c.jpeg?token=5cd39fd3857042446ecbfc30c2990963

Project Name:工程的名稱,可以自定義。

Project Type:工程的類型,Service表示原子化服務(wù),Application表示傳統(tǒng)方式的需要安裝的應(yīng)用。因?yàn)橐獎(jiǎng)?chuàng)建原子化服務(wù)工程,這里選擇Service。

Device Type:根據(jù)需要選擇該工程支持的設(shè)備類型。支持多選。

注:如果勾選了TV,則下面的“Show in Service Center”會(huì)消失。

Show in Service Center:是否在服務(wù)中心露出。開啟此開關(guān),則默認(rèn)創(chuàng)建一張小尺寸(2x2)服務(wù)卡片和快照。

(4) 點(diǎn)擊Finish,工具會(huì)自動(dòng)生成示例代碼和相關(guān)資源,等待工程創(chuàng)建完成。

2. 工程配置

(1) config.json配置文件

每個(gè)HAP的根目錄下都存在一個(gè)config.json配置文件,文件內(nèi)容主要涵蓋以下三個(gè)方面:

應(yīng)用的全局配置信息,包含應(yīng)用的包名、生產(chǎn)廠商、版本號(hào)等基本信息。

應(yīng)用在具體設(shè)備上的配置信息,包含應(yīng)用的備份恢復(fù)、網(wǎng)絡(luò)安全等能力。

HAP包的配置信息,包含每個(gè)Ability必須定義的基本屬性(如包名、類名、類型以及Ability提供的能力),以及應(yīng)用訪問系統(tǒng)或其他應(yīng)用受保護(hù)部分所需的權(quán)限等。

工程創(chuàng)建完成之后,config.json文件默認(rèn)包含以下配置內(nèi)容。

① 免安裝配置信息

"distro": { "deliveryWithInstall": true, "moduleName": "entry", "moduleType": "entry", "installationFree": true }

installationFree為true表示該HAP是免安裝的。

② 服務(wù)卡片配置信息

由于創(chuàng)建工程時(shí)開啟了Show in Service Center開關(guān),所以默認(rèn)配置了此信息。

"abilities": [

{

"skills": [

...

],

"name": "com.example.atomicservicedemo.MainAbility",

"icon": "$media:icon",

"description": "$string:mainability_description",

"formsEnabled": true,

"label": "$string:app_name",

"type": "page",

"forms": [

{

"jsComponentName": "widget",

"isDefault": true,

"scheduledUpdateTime": "10:30",

"defaultDimension": "2*2",

"name": "widget",

"description": "$string:widget_description",

"colorMode": "auto",

"type": "JS",

"supportDimensions": [

"2*2"

],

"updateEnabled": true,

"updateDuration": 1

}

],

"launchType": "standard"

}

]

config.json文件的詳細(xì)說明,可以參考官網(wǎng):

https://developer.harmonyos.com/cn/docs/documentation/doc-guides/basic-config-file-elements-0000000000034463

快照

創(chuàng)建工程時(shí),如果開啟了Show in Service Center開關(guān),工程創(chuàng)建完成后會(huì)在工程目錄下自動(dòng)生成快照(EntryCard)文件夾。如下圖所示:

2934349b033b5bb5120ba0f7895dd230b700bc77.jpeg?token=6ec5c1b857ef20fd405f72432e0d5efb

此文件夾下默認(rèn)生成了一張2x2(小尺寸)的快照(一張png格式的圖片)。開發(fā)者可以將其替換為事先設(shè)計(jì)好的2x2快照,樣式上應(yīng)與對(duì)應(yīng)的服務(wù)卡片保持一致:將新的快照拷貝到上圖目錄下,刪除默認(rèn)圖片,新圖片命名遵循格式“服務(wù)卡片名-2x2.png”。

說明:“服務(wù)卡片名”可以查看config.json文件的forms數(shù)組中的“name”字段。

3. 開發(fā)原子化服務(wù)

之前的推文中,我們已經(jīng)介紹過服務(wù)卡片的開發(fā),此處不再贅述,點(diǎn)擊下方文字即可。

一文看懂HarmonyOS服務(wù)卡片運(yùn)行原理和開發(fā)方法

我們重點(diǎn)介紹一下如何將原子化服務(wù)接入到華為分享。

JAVA工程為例,開發(fā)步驟如下:

① 新建兩個(gè)idl文件,用于和華為分享進(jìn)行跨進(jìn)程通信

IHwShareCallback.idl文件:

interface com.huawei.hwshare.third.IHwShareCallback {

[oneway] void notifyState([in] int state);

}

IHwShareService.idl文件:

sequenceable ohos.interwork.utils.PacMapEx;

interface com.huawei.hwshare.third.IHwShareCallback;

interface com.huawei.hwshare.third.IHwShareService {

int startAuth([in] String appId, [in] IHwShareCallback callback);

int shareFaInfo([in] PacMapEx pacMapEx);

}

開發(fā)者只需將.idl文件保存至DevEco Studio項(xiàng)目的src/目錄內(nèi),工具則會(huì)在構(gòu)建應(yīng)用時(shí),在項(xiàng)目的generated/目錄中生成IRemoteObject接口文件、Stub文件、Proxy文件。IHwShareCallback.idl文件和IHwShareService.idl文件會(huì)生成對(duì)應(yīng)的IHwShareCallback.java和IHwShareService.java。

② 新建一個(gè)管理類“ShareAtomicServiceManager.java”,用于管理與華為分享的跨進(jìn)程通信。

這里對(duì)外暴露一個(gè)接口:

public void shareFaInfo(String appId, PacMapEx pacMap) {

if (mContext == null) {

return;

}

mAppId = appId;

mSharePacMap = pacMap;

mHandler.removeTask(mTask);

shareFaInfo();

bindShareService();

}

appId是應(yīng)用在應(yīng)用市場的唯一標(biāo)識(shí),在創(chuàng)建項(xiàng)目時(shí)生成。

pacMap是需要傳遞給華為分享的信息。

shareFaInfo()用于分享FA信息到華為分享應(yīng)用中,代碼如下:

private void shareFaInfo() {

if (mShareService == null) {

return;

}

if (mHasPermission) {

HiLog.info(LABEL_LOG, LOG_FORMAT, TAG, "start shareFaInfo.");

try {

mShareService.shareFaInfo(mSharePacMap);

mSharePacMap = null;

} catch (RemoteException e) {

HiLog.error(LABEL_LOG, LOG_FORMAT, TAG, "shareFaInfo error.");

}

}

// 不使用時(shí)斷開

mHandler.postTask(mTask, UNBIND_TIME);

}

其中,mTask用于執(zhí)行斷連的操作:

private final Runnable mTask = () -> {

if (mContext != null && mShareService != null) {

mContext.disconnectAbility(mConnection);

mHasPermission = false;

mShareService = null;

}

};

另外,綁定華為分享服務(wù)的代碼如下:

private void bindShareService() {

if (mShareService != null) {

// 保證僅連一次。

return;

}

HiLog.info(LABEL_LOG, LOG_FORMAT, TAG, "start bindShareService.");

Operation operation = new Intent.OperationBuilder().withBundleName(SHARE_PKG_NAME)

.withAction(SHARE_ACTION).withFlags(Intent.FLAG_NOT_OHOS_COMPONENT).build();

Intent intent = new Intent();

intent.setOperation(operation);

mContext.connectAbility(intent, mConnection);

其中,mConnection的定義如下:

// 管理與華為分享的連接 private final IAbilityConnection mConnection = new IAbilityConnection() {@Override public void onAbilityConnectDone(ElementName elementName,IRemoteObjectiRemoteObject,int i) {HiLog.error(LABEL_LOG, LOG_FORMAT,TAG,"onAbilityConnectDonesuccess."); mHandler.postTask(()->{mShareService = new HwShareServiceProxy(iRemoteObject); try {mShareService.startAuth(mAppId, mFaCallback); } catch (RemoteException e) {HiLog.error(LABEL_LOG,LOG_FORMAT,TAG,"startAuth error."); }});} @Override public void on AbilityDisconnectDone(ElementName elementName, int i) {HiLog.info(LABEL_LOG,LOG_FORMAT,TAG,"onAbilityDisconnectDone."); mHandler.postTask(()->{mShareService=null;mHasPermission=false;});}};

mShareService.startAuth(mAppId, mFaCallback)是對(duì)appId進(jìn)行驗(yàn)證,驗(yàn)證成功之后會(huì)通過mFaCallback回調(diào)。

mFaCallback的代碼如下:

private final HwShareCallbackStub mFaCallback = new HwShareCallbackStub("HwShareCallbackStub") {

@Override

public void notifyState(int state) throws RemoteException {

mHandler.postTask(()->{

HiLog.info(LABEL_LOG, LOG_FORMAT, TAG, "notifyState: " + state);

if (state == 0) {

mHasPermission = true;

if (mSharePacMap != null) {

shareFaInfo();

}

}

});

}

};

state為0時(shí)表示認(rèn)證通過,可以進(jìn)行分享。

③ 在MainAbilitySlice.java中,調(diào)用連接華為分享的接口:

ShareAtomicServiceManager.getInstance(this).shareFaInfo("629005930163350400", getPacMap());

"629005930163350400"是appId,每個(gè)應(yīng)用不一樣,需要替換成應(yīng)用自己的appId。getPacMap是獲取需要分享的內(nèi)容封裝方法。

private PacMapEx getPacMap() {

PacMapEx pacMap = new PacMapEx();

pacMap.putObjectValue(ShareAtomicServiceManager.SHARING_FA_TYPE, 0);

pacMap.putObjectValue(ShareAtomicServiceManager.HM_BUNDLE_NAME, getBundleName());

pacMap.putObjectValue(ShareAtomicServiceManager.SHARING_EXTRA_INFO, "原子化服務(wù)分享額外內(nèi)容");

pacMap.putObjectValue(ShareAtomicServiceManager.HM_ABILITY_NAME, MainAbility.class.getName());

pacMap.putObjectValue(ShareAtomicServiceManager.SHARING_CONTENT_INFO, "原子化服務(wù)通過華為分享的內(nèi)容");

byte[] sharedContentImg = getResourceBytes(ResourceTable.Media_share_conteng_img);

pacMap.putObjectValue(ShareAtomicServiceManager.SHARING_THUMB_DATA, sharedContentImg);

byte[] iconImg = getResourceBytes(ResourceTable.Media_icon);

pacMap.putObjectValue(ShareAtomicServiceManager.HM_FA_ICON, iconImg);

pacMap.putObjectValue(ShareAtomicServiceManager.HM_FA_NAME, getString(ResourceTable.String_app_name));

return pacMap;

}

其中,常量的定義如下:

public static final String HM_FA_ICON = "ohos_fa_icon";

public static final String HM_FA_NAME = "ohos_fa_name";

public static final String HM_ABILITY_NAME = "ohos_ability_name";

public static final String HM_BUNDLE_NAME = "ohos_bundle_name";

public static final String SHARING_FA_TYPE = "sharing_fa_type";

public static final String SHARING_THUMB_DATA = "sharing_fa_thumb_data";

public static final String SHARING_CONTENT_INFO = "sharing_fa_content_info";

public static final String SHARING_EXTRA_INFO = "sharing_fa_extra_info";

常量含義說明如下:

54fbb2fb43166d220a831911f5ad0efe9252d2d2.jpeg?token=b58c2e7a2e0ac4894571dbe296ab147c

對(duì)于圖片資源的解析可以參考如下:

private byte[] getResourceBytes(int resId) {

InputStream resource = null;

ByteArrayOutputStream outStream = null;

try {

resource = getResourceManager().getResource(resId);

outStream = new ByteArrayOutputStream();

byte[] buffer = new byte[1024];

int len;

while ((len = resource.read(buffer)) != -1) {

outStream.write(buffer, 0, len);

}

outStream.close();

resource.close();

return outStream.toByteArray();

} catch (IOException e) {

HiLog.error(TAG, "get resource occurs io exception!");

} catch (NotExistException e) {

HiLog.error(TAG, "it dose not exist!");

} finally {

if (resource != null) {

try {

resource.close();

} catch (IOException e) {

HiLog.error(TAG, "close input stream occurs io exception!");

}

}

if (outStream != null) {

try {

resource.close();

} catch (IOException e) {

HiLog.error(TAG, "close output stream occurs io exception!");

}

}

}

return null;

}

大家也可以參考官網(wǎng)上接入華為分享的開發(fā)指導(dǎo):

https://developer.harmonyos.com/cn/docs/documentation/doc-guides/huawei-share-service-sharing-guidelines-0000001141302387

運(yùn)行工程

在虛擬機(jī)或者真機(jī)運(yùn)行創(chuàng)建的工程之后,會(huì)顯示原子化服務(wù)的主界面(即服務(wù)界面)。但是在桌面找不到原子化服務(wù)圖標(biāo),因?yàn)樵踊?wù)在桌面是沒有icon的。可以在服務(wù)中心通過搜索原子化服務(wù)的名稱找到該原子化服務(wù),將其服務(wù)卡片添加到桌面。

原子化服務(wù)接入華為分享的運(yùn)行結(jié)果,需要準(zhǔn)備兩臺(tái)HarmonyOS手機(jī),且其系統(tǒng)軟件版本不低于HarmonyOS 2。

503d269759ee3d6dad833094f0986a2b4e4ade44.jpeg?token=1b89c7f10d57161e08bf69104efa2655

以上就是本期原子化服務(wù)的介紹了,你get到了嗎?期待更多的開發(fā)者小伙伴們加入我們,開啟您的原子化服務(wù)開發(fā)之旅哦~

fqj

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

    關(guān)注

    2

    文章

    438

    瀏覽量

    34114
  • HarmonyOS
    +關(guān)注

    關(guān)注

    79

    文章

    1958

    瀏覽量

    29916
  • 原子化服務(wù)
    +關(guān)注

    關(guān)注

    0

    文章

    31

    瀏覽量

    862
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    開放原子開源數(shù)據(jù)庫生態(tài)論壇成功舉辦

    以“開源生態(tài)筑基礎(chǔ),數(shù)字經(jīng)濟(jì)鑄未來”為主題的2024全球數(shù)字經(jīng)濟(jì)大會(huì)——開放原子開源數(shù)據(jù)庫生態(tài)論壇在北京成功舉辦。開放原子開源基金會(huì)副秘書長辛?xí)匀A出席并致辭,北京市經(jīng)濟(jì)和信息局信息
    的頭像 發(fā)表于 09-24 10:36 ?356次閱讀

    raksmart洛杉磯云服務(wù)器全面解析

    RAKsmart洛杉磯云服務(wù)器是一種高性能的云計(jì)算解決方案,專為滿足不同業(yè)務(wù)需求而設(shè)計(jì)。以下是對(duì)RAKsmart洛杉磯云服務(wù)器的具體介紹,rak小編為您整理發(fā)布raksmart洛杉磯云服務(wù)器全面
    的頭像 發(fā)表于 09-14 09:36 ?205次閱讀

    GPU云服務(wù)器架構(gòu)解析及應(yīng)用優(yōu)勢(shì)

    GPU云服務(wù)器作為一種高性能計(jì)算資源,近年來在人工智能、大數(shù)據(jù)分析、圖形渲染等領(lǐng)域得到了廣泛應(yīng)用。它結(jié)合了云計(jì)算的靈活性與GPU的強(qiáng)大計(jì)算能力,為企業(yè)和個(gè)人用戶提供了一種高效、便捷的計(jì)算解決方案。下面我們將從架構(gòu)解析和技術(shù)優(yōu)勢(shì)兩個(gè)方面來詳細(xì)了解GPU云
    的頭像 發(fā)表于 08-14 09:43 ?266次閱讀

    鴻蒙原生應(yīng)用元服務(wù)開發(fā)-設(shè)備管理USB服務(wù)開發(fā)概覽

    。 USB Service:主要實(shí)現(xiàn)HAL層數(shù)據(jù)的接收、解析、分發(fā)以及對(duì)設(shè)備的管理等。 USB HAL層:提供給用戶態(tài)可直接調(diào)用的驅(qū)動(dòng)能力接口。 本文引用參考HarmonyOS官方API9。
    發(fā)表于 06-11 10:26

    深度解析電化學(xué)儲(chǔ)能最新官方數(shù)據(jù)

    深度解析電化學(xué)儲(chǔ)能最新官方數(shù)據(jù) 近日,中國電力企業(yè)聯(lián)合會(huì)發(fā)布了《2023年度電化學(xué)儲(chǔ)能電站行業(yè)統(tǒng)計(jì)數(shù)據(jù)》(以下簡稱“統(tǒng)計(jì)數(shù)據(jù)”),數(shù)據(jù)依托于國家能源局批準(zhǔn)建設(shè)的國家電化學(xué)儲(chǔ)能電站安全監(jiān)測信息平臺(tái)
    發(fā)表于 05-20 11:29 ?463次閱讀
    深度<b class='flag-5'>解析</b>電化學(xué)儲(chǔ)能最新<b class='flag-5'>官方</b>數(shù)據(jù)

    使用STM32F407正點(diǎn)原子的開發(fā)板作為客戶端,電腦作為服務(wù)器端時(shí)程序總是死在接收函數(shù)上是為什么?

    生成的工程可以ping通,使用STM32F407正點(diǎn)原子的開發(fā)板作為客戶端,電腦作為服務(wù)器端時(shí)程序總是死在接收函數(shù)上,把接收函數(shù)屏蔽后程序正常也能于服務(wù)器連接上。請(qǐng)大神指教,是否是哪里參數(shù)配置有問題導(dǎo)致這樣現(xiàn)象?
    發(fā)表于 04-29 06:54

    開放原子開源大賽OpenHarmony智能應(yīng)用生態(tài)挑戰(zhàn)賽決賽路成功舉辦

    軟件定義世界,開源共筑未來。在江蘇省工信廳、市工信局、開放原子開源基金會(huì)及相關(guān)單位的指導(dǎo)和支持下,4月19-20日,由中軟國際教育科技集團(tuán)聯(lián)合舉辦的開放原子開源大賽-OpenHarmony智能應(yīng)用生態(tài)挑戰(zhàn)賽決賽路演在鹽城市大數(shù)
    的頭像 發(fā)表于 04-24 09:48 ?351次閱讀

    奔馳將放棄電動(dòng)?奔馳官方辟謠!

    中工汽車網(wǎng)訊,3月6日,從梅賽德斯-奔馳官方獲悉,關(guān)于近期網(wǎng)絡(luò)上傳播的“奔馳將放棄電動(dòng)”的消息嚴(yán)重不實(shí)。
    的頭像 發(fā)表于 03-07 16:13 ?1409次閱讀

    LED樹木燈光亮方案的設(shè)計(jì)與控制技術(shù)解析

    LED樹木燈光亮方案的設(shè)計(jì)與控制技術(shù)解析
    的頭像 發(fā)表于 01-24 17:54 ?595次閱讀
    LED樹木燈光亮<b class='flag-5'>化</b>方案的設(shè)計(jì)與控制技術(shù)<b class='flag-5'>解析</b>

    ?PLC從HTTP服務(wù)端獲取JSON文件,解析數(shù)據(jù)到寄存器

    文件提交給HTTP的服務(wù)端; 服務(wù)端有返回的JSON,或者GET命令獲取到的JSON,網(wǎng)關(guān)進(jìn)行解析后將數(shù)據(jù)寫入到PLC寄存器。 本文主要描述通過GET命令獲取數(shù)據(jù),解析到西門子PLC的
    發(fā)表于 01-24 09:47

    AD9689在DDC解析時(shí)的多硫磷同步與什么有關(guān)?

    AD9689, 在 DDC 解析時(shí)的多硫磷同步 與什么有關(guān)?
    發(fā)表于 12-07 07:52

    如何使用原子類型

    std::atomic 實(shí)例的數(shù)據(jù)類型,也都是支持原子操作的。 二、如何使用原子類型 2.1 原子庫atomic支持的原子操作
    的頭像 發(fā)表于 11-10 16:21 ?701次閱讀
    如何使用<b class='flag-5'>原子</b>類型

    芯片原子鐘:精確時(shí)間的微型未來

    在全球定位、通訊系統(tǒng)和科學(xué)研究中,精確的時(shí)間測量是不可或缺的。自從1949年第一臺(tái)原子鐘問世以來,原子鐘技術(shù)經(jīng)歷了巨大的演變。近年來,芯片原子鐘作為最新的創(chuàng)新,其微型和高精度特性成為
    的頭像 發(fā)表于 11-06 13:46 ?1304次閱讀
    芯片<b class='flag-5'>原子</b>鐘:精確時(shí)間的微型<b class='flag-5'>化</b>未來

    基于DevEco Studio的OpenHarmony應(yīng)用原子服務(wù)(元服務(wù))入門教程

    一、創(chuàng)建項(xiàng)目 二、創(chuàng)建卡片 三、應(yīng)用服務(wù)代碼 Index.ets @Entry @Component struct Index { @State TITLE: string
    發(fā)表于 11-06 11:18

    HarmonyOS鴻蒙原生應(yīng)用開發(fā)設(shè)計(jì)- 元服務(wù)原子服務(wù))圖標(biāo)

    以防止使用別人的元服務(wù)圖標(biāo)侵權(quán)意外情況等,減少自主創(chuàng)作元服務(wù)圖標(biāo)的工作量。當(dāng)然,如果有個(gè)性的自主又有能力創(chuàng)作的除外。 元服務(wù)原子
    發(fā)表于 11-01 16:55