chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

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

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

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

用Java開發(fā)HarmonyOS服務(wù)卡片

OpenHarmony技術(shù)社區(qū) ? 來源:OpenHarmony技術(shù)社區(qū) ? 作者:賈葉照 ? 2022-04-26 11:04 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

看本文章之前需要先熟悉一下原子化服務(wù)特征和流程 HarmonyOS-5分鐘教會你原子化服務(wù)。

服務(wù)卡片(以下簡稱“卡片”)是 FA 的一種界面展示形式,將 FA 的重要信息或操作前置到卡片,以達(dá)到服務(wù)直達(dá),減少體驗(yàn)層級的目的。

卡片常用于嵌入到其他應(yīng)用(當(dāng)前只支持系統(tǒng)應(yīng)用)中作為其界面的一部分顯示,并支持拉起頁面,發(fā)送消息等基礎(chǔ)的交互功能??ㄆ褂梅截?fù)責(zé)顯示卡片。

卡片提供方:開發(fā)者僅需作為卡片提供方進(jìn)行服務(wù)卡片內(nèi)容的開發(fā),控制卡片實(shí)際顯示的內(nèi)容、控件布局以及控件點(diǎn)擊事件。

卡片使用方:顯示卡片內(nèi)容的宿主應(yīng)用,控制卡片在宿主中展示的位置。

卡片管理服務(wù):用于管理系統(tǒng)中所添加卡片的常駐代理服務(wù),包括卡片對象的管理與使用,以及卡片周期性刷新等。

明:卡片使用方和提供方不要求常駐運(yùn)行,在需要添加/刪除/請求更新卡片時(shí),卡片管理服務(wù)會拉起卡片提供方獲取卡片信息。

服務(wù)卡片的運(yùn)作機(jī)制

先上圖:

ea24f37e-c480-11ec-bce3-dac502259ad0.png

卡片管理服務(wù)包含以下模塊:
  • 周期性刷新:在卡片添加后,根據(jù)卡片的刷新策略啟動定時(shí)任務(wù)周期性觸發(fā)卡片的刷新。

  • 卡片緩存管理:在卡片添加到卡片管理服務(wù)后,對卡片的視圖信息進(jìn)行緩存,以便下次獲取卡片時(shí)可以直接返回緩存數(shù)據(jù),降低時(shí)延。

  • 卡片生命周期管理:對于卡片切換到后臺或者被遮擋時(shí),暫??ㄆ乃⑿?;以及卡片的升級/卸載場景下對卡片數(shù)據(jù)的更新和清理。

  • 卡片使用方對象管理:對卡片使用方的 RPC 對象進(jìn)行管理,用于使用方請求進(jìn)行校驗(yàn)以及對卡片更新后的回調(diào)處理。

  • 通信適配層:負(fù)責(zé)與卡片使用方和提供方進(jìn)行 RPC 通信。

卡片提供方包含以下模塊:
  • 卡片服務(wù):由卡片提供方開發(fā)者實(shí)現(xiàn),開發(fā)者實(shí)現(xiàn) onCreateForm、onUpdateForm 和 onDeleteForm 處理創(chuàng)建卡片、更新卡片以及刪除卡片等請求,提供相應(yīng)的卡片服務(wù)。

  • 卡片提供方實(shí)例管理模塊:由卡片提供方開發(fā)者實(shí)現(xiàn),負(fù)責(zé)對卡片管理服務(wù)分配的卡片實(shí)例進(jìn)行持久化管理。

  • 通信適配層:HarmonyOS SDK 提供,負(fù)責(zé)與卡片管理服務(wù)通信,用于將卡片的更新數(shù)據(jù)主動推送到卡片管理服務(wù)。

服務(wù)卡片開發(fā)簡介

關(guān)于服務(wù)卡片的接口說明,Java 卡片與 JS 卡片選型,約束與限制可以去官網(wǎng)上查看:

https://developer.harmonyos.com/cn/docs/documentation/doc-guides/ability-service-widget-provider-intro-0000001150722105

Java 卡片開發(fā)

這次先來講解 Java 卡片開發(fā),后期會專門用一篇來講解 JS 卡片開發(fā)。

使用 DevEco Studio 創(chuàng)建卡片工程(前面文章已經(jīng)說明,這里不再累述)。

我們先看看配置文件 config.json:

"forms":[
{
"landscapeLayouts":[
"$layout:form_weather_widget_2_2"
],
"isDefault":true,
"scheduledUpdateTime":"10:30",
"defaultDimension":"2*2",
"name":"widget",
"description":"Thisisaservicewidget",
"colorMode":"auto",
"type":"Java",
"supportDimensions":[
"2*2"
],
"portraitLayouts":[
"$layout:form_weather_widget_2_2"
],
"updateEnabled":true,
"updateDuration":1
}
],

①“type”:默認(rèn)值是 JS,我們需要更改為“Java”代表是一個(gè) Java 卡片。

②“scheduledUpdateTime”:表示卡片的定點(diǎn)刷新的時(shí)刻,采用 24 小時(shí)制,精確到分鐘。但是我在設(shè)置時(shí)間點(diǎn)的時(shí)候并沒有更新,具體原因待考察。

"scheduledUpdateTime":"10:30",

③“updateEnabled”:表示卡片是否支持周期性刷新,取值范圍:
  • true:表示支持周期性刷。

  • false:表示不支持周期性刷新。

④“updateDuration”:表示卡片定時(shí)刷新的更新周期,單位為 30 分鐘,取值為自然數(shù)。
  • 當(dāng)取值為 0 時(shí),表示該參數(shù)不生效。

  • 當(dāng)取值為正整數(shù) N 時(shí),表示刷新周期為 30*N 分鐘。

"updateEnabled":true,
"updateDuration":1

設(shè)置卡片定時(shí)刷新,每 30 分鐘更新一次。

⑤“supportDimensions”:表示卡片支持的外觀規(guī)格,取值范圍:
  • 1*2:表示 1 行 2 列的二宮格。

  • 2*2:表示 2 行 2 列的四宮格。

  • 2*4:表示 2 行 4 列的八宮格。

  • 4*4:表示 4 行 4 列的十六宮格。

⑥“portraitLayouts”:表示卡片外觀規(guī)格對應(yīng)的豎向布局文件,與 supportDimensions 中的規(guī)格一一對應(yīng)。僅當(dāng)卡片類型為 Java 卡片時(shí),需要配置該標(biāo)簽。

⑦“l(fā)andscapeLayouts”:表示卡片外觀規(guī)格對應(yīng)的橫向布局文件,與 supportDimensions 中的規(guī)格一一對應(yīng)。僅當(dāng)卡片類型為 Java 卡片時(shí),需要配置該標(biāo)簽。

MainAbility 中覆寫卡片相關(guān)回調(diào)函數(shù):
  • onCreateForm(Intent intent)

  • onUpdateForm(long formId)

  • onDeleteForm(long formId)

  • onCastTempForm(long formId)

  • onEventNotify(Map formEvents)

  • onAcquireFormState(Intent intent)

當(dāng)卡片使用方請求獲取卡片時(shí),卡片提供方會被拉起并調(diào)用 onCreateForm(Intent intent) 回調(diào),intent 中會帶有卡片 ID,卡片名稱,臨時(shí)卡片標(biāo)記和卡片外觀規(guī)格信息。

代碼如下:
protectedProviderFormInfoonCreateForm(Intentintent){
HiLog.info(TAG,"onCreateForm");
//卡片id
longformId=intent.getLongParam(AbilitySlice.PARAM_FORM_IDENTITY_KEY,INVALID_FORM_ID);
//卡片名稱
StringformName=intent.getStringParam(AbilitySlice.PARAM_FORM_NAME_KEY);
//卡片規(guī)格
intdimension=intent.getIntParam(AbilitySlice.PARAM_FORM_DIMENSION_KEY,DEFAULT_DIMENSION_2X2);
HiLog.info(TAG,"onCreateForm:formId="+formId+",formName="+formName+",dimension="+dimension);
//將卡片信息存入數(shù)據(jù)庫
saveFormInfo(formId,formName,dimension);

//開發(fā)者需要根據(jù)卡片的名稱以及外觀規(guī)格獲取對應(yīng)的xml布局并構(gòu)造卡片對象,此處ResourceTable.Layout_form_weather_widget_2_2
ProviderFormInfoformInfo=newProviderFormInfo(ResourceTable.Layout_form_weather_widget_2_2,this);
//獲取此 ProviderFormInfo 對象中包含的ComponentProvider數(shù)據(jù)。
ComponentProvidercomponentProvider=formInfo.getComponentProvider();
//設(shè)置組件的文本內(nèi)容
componentProvider.setText(ResourceTable.Id_weather_text,"天氣:多云");
componentProvider.setText(ResourceTable.Id_weather_temperature,"溫度:29度");
componentProvider.setText(ResourceTable.Id_weather_ph,"PH值:2.9");
//將ComponentProvider中指定的操作合并到此ProviderFormInfo對象中包含的ComponentProvider對象中
formInfo.mergeActions(componentProvider);
returnformInfo;
}

布局:form_weather_widget_2_2.xml


<DependentLayout
xmlns:ohos="http://schemas.huawei.com/res/ohos"
ohos:height="match_parent"
ohos:width="match_parent"
ohos:background_element="#FFFFFFFF"
ohos:remote="true">

<Image
ohos:height="match_parent"
ohos:width="126vp"
ohos:horizontal_center="true"
ohos:image_src="$media:weather"
ohos:scale_mode="zoom_start"
ohos:top_margin="17vp"/>

<DirectionalLayout
ohos:height="match_content"
ohos:width="match_content"
ohos:align_parent_bottom="true"
ohos:bottom_margin="12vp"
ohos:horizontal_center="true"
ohos:orientation="vertical">

<Text
ohos:id="$+id:weather_text"
ohos:height="match_content"
ohos:width="match_parent"
ohos:text="天氣:晴"
ohos:text_color="#E5000000"
ohos:text_size="12fp"
ohos:text_weight="400"
ohos:top_margin="2vp"
ohos:truncation_mode="ellipsis_at_end"/>

<Text
ohos:id="$+id:weather_temperature"
ohos:height="match_content"
ohos:width="match_parent"
ohos:text="溫度:25度"
ohos:text_color="#99000000"
ohos:text_size="12fp"
ohos:text_weight="400"
ohos:top_margin="2vp"
ohos:truncation_mode="ellipsis_at_end"/>
<Text
ohos:id="$+id:weather_ph"
ohos:height="match_content"
ohos:width="match_parent"
ohos:text="PH值:2.5"
ohos:text_color="#99000000"
ohos:text_size="12fp"
ohos:text_weight="400"
ohos:top_margin="2vp"
ohos:truncation_mode="ellipsis_at_end"/>
DirectionalLayout>
DependentLayout>

ea32d7d2-c480-11ec-bce3-dac502259ad0.png當(dāng)需要卡片提供方更新數(shù)據(jù)時(shí)(如觸發(fā)了定時(shí)更新、定點(diǎn)更新或者卡片使用方主動請求更新),卡片提供方獲取最新數(shù)據(jù),并調(diào)用 updateForm 接口更新卡片。

示例如下:

protectedvoidonUpdateForm(longformId){
HiLog.info(TAG,"onUpdateForm");
super.onUpdateForm(formId);
refeshData();
}

/**
*updateforms
*/
privatevoidrefeshData(){
//獲取卡片集合
ListformList=DatabaseUtils.queryForms(this,null);

for(FormInfoformInfo:formList){
ProviderFormInforefesh=newProviderFormInfo(ResourceTable.Layout_form_weather_widget_2_2,this);

ComponentProvidercomponentProvider=refesh.getComponentProvider();
//這里更新的值,實(shí)際使用中可根據(jù)自己項(xiàng)目要求設(shè)置,比如:隨機(jī)獲取一個(gè)值
componentProvider.setText(ResourceTable.Id_weather_text,"天氣:多云轉(zhuǎn)晴");
componentProvider.setText(ResourceTable.Id_weather_temperature,"溫度:30度");
componentProvider.setText(ResourceTable.Id_weather_ph,"PH值:3.0");
try{
//卡片提供方主動更新卡片
updateForm(formInfo.getFormId(),componentProvider);
}catch(FormExceptione){
HiLog.error(TAG,"FormException");
}
}
}

定時(shí)更新效果:

ea41873c-c480-11ec-bce3-dac502259ad0.png

總結(jié)

實(shí)際項(xiàng)目中需要通過網(wǎng)絡(luò)獲取數(shù)據(jù),這里只是簡單的模擬數(shù)據(jù)。

只是簡單說明了服務(wù)卡片創(chuàng)建的回調(diào)方法實(shí)現(xiàn),定點(diǎn)和定時(shí)數(shù)據(jù)更新的時(shí)機(jī)和回調(diào)方法的實(shí)現(xiàn),下期會更新關(guān)于服務(wù)卡片信息持久化、卡片控制事件。

審核編輯 :李倩

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

    關(guān)注

    20

    文章

    2997

    瀏覽量

    115585
  • HarmonyOS
    +關(guān)注

    關(guān)注

    80

    文章

    2146

    瀏覽量

    35502

原文標(biāo)題:用Java開發(fā)HarmonyOS服務(wù)卡片

文章出處:【微信號:gh_834c4b3d87fe,微信公眾號:OpenHarmony技術(shù)社區(qū)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

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

    HarmonyOSAI編程萬能卡片生成(二)

    兩種方式來觸發(fā)卡片頁面刷新;對于元服務(wù)工程生成的卡片,數(shù)據(jù)交互為通過網(wǎng)絡(luò)請求方式觸發(fā)卡片頁面刷新。 卡片事件:使用router事件跳轉(zhuǎn)到指定
    發(fā)表于 09-09 16:10

    HarmonyOSAI編程萬能卡片生成(一)

    基于AI大模型理解開發(fā)者的卡片需求信息,通過對話式的交互智能生成HarmonyOS萬能卡片工程。 使用約束 建議從以下維度描述卡片需求: 當(dāng)
    發(fā)表于 09-08 17:09

    HarmonyOS AI輔助編程工具(CodeGenie)卡片生成

    基于AI大模型理解開發(fā)者的卡片需求信息,通過對話式的交互智能生成HarmonyOS萬能卡片工程。 一、 使用約束 建議從以下維度描述卡片需求
    發(fā)表于 08-12 11:04

    HarmonyOS 5】金融應(yīng)用開發(fā)鴻蒙組件實(shí)踐

    HarmonyOS 5】金融應(yīng)用開發(fā)鴻蒙組件實(shí)踐 ##鴻蒙開發(fā)能力 ##HarmonyOS SDK應(yīng)用服務(wù)##鴻蒙金融類應(yīng)用 (金融理財(cái)#
    的頭像 發(fā)表于 07-11 18:20 ?731次閱讀
    【<b class='flag-5'>HarmonyOS</b> 5】金融應(yīng)用<b class='flag-5'>開發(fā)</b>鴻蒙組件實(shí)踐

    HarmonyOS 5 入門系列 】鴻蒙HarmonyOS示例項(xiàng)目講解

    HarmonyOS 5 入門系列 】鴻蒙HarmonyOS示例項(xiàng)目講解 ##鴻蒙開發(fā)能力 ##HarmonyOS SDK應(yīng)用服務(wù)##鴻蒙
    的頭像 發(fā)表于 07-07 11:57 ?777次閱讀
    【 <b class='flag-5'>HarmonyOS</b> 5 入門系列 】鴻蒙<b class='flag-5'>HarmonyOS</b>示例項(xiàng)目講解

    FA模型卡片和Stage模型卡片切換

    卡片切換 卡片切換主要包含如下三部分: 卡片頁面布局:FA模型卡片和Stage模型卡片的布局都采用類web范式
    發(fā)表于 06-06 08:10

    HarmonyOS5云服務(wù)技術(shù)分享--ArkTS開發(fā)函數(shù)

    等打包 ? 支持Node.js 14.x/18.x和Java 1.8 ? 支持HTTP觸發(fā)器調(diào)用 ? 持續(xù)開發(fā)調(diào)試一條龍 ?? 準(zhǔn)備工作: 安裝AGCLI工具(華為應(yīng)用分發(fā)服務(wù)命令行工具) 準(zhǔn)備測試
    發(fā)表于 05-22 17:29

    HarmonyOS5云服務(wù)技術(shù)分享--ArkTS開發(fā)Node環(huán)境

    ? 你好呀,開發(fā)者小伙伴們!今天我們來聊聊如何在HarmonyOS(ArkTS API 9及以上)中玩轉(zhuǎn)云函數(shù),特別是結(jié)合Node.js和HTTP觸發(fā)器的開發(fā)技巧。文章會手把手帶你從零開始,
    發(fā)表于 05-22 17:21

    HarmonyOS5云服務(wù)技術(shù)分享--云函數(shù)創(chuàng)建配置指南

    大家好!今天咱們來一起探索如何在華為HarmonyOS的AGC云函數(shù)服務(wù)中創(chuàng)建和配置函數(shù),手把手教你HTTP觸發(fā)器玩轉(zhuǎn)云函數(shù)。無論你是剛?cè)腴T還是想優(yōu)化現(xiàn)有功能,這篇指南都會給你清晰的指引,咱們直接
    發(fā)表于 05-22 17:08

    Java開發(fā)者必備的效率工具——Perforce JRebel是什么?為什么很多Java開發(fā)者在用?

    Perforce JRebel是一款Java開發(fā)效率工具,旨在幫助java開發(fā)人員更快地編寫更好的應(yīng)用程序。JRebel可即時(shí)重新加載對代碼的修改,無需重啟或重新部署應(yīng)用程序,就能讓
    的頭像 發(fā)表于 04-27 13:44 ?621次閱讀
    <b class='flag-5'>Java</b><b class='flag-5'>開發(fā)</b>者必備的效率工具——Perforce JRebel是什么?為什么很多<b class='flag-5'>Java</b><b class='flag-5'>開發(fā)</b>者在用?

    HarmonyOS NEXT 原生應(yīng)用/元服務(wù)調(diào)試概述

    開發(fā)者更方便、高效地調(diào)試應(yīng)用/元服務(wù)。 HarmonyOS應(yīng)用/元服務(wù)調(diào)試支持使用真機(jī)設(shè)備、模擬器、預(yù)覽器調(diào)試。接下來以使用真機(jī)設(shè)備為例進(jìn)行說明,詳細(xì)的調(diào)試流程如下圖所示: 1.配置簽
    發(fā)表于 02-26 11:03

    效率大升!AI賦能鴻蒙萬能卡片開發(fā)

    萬能卡片,作為鴻蒙生態(tài)應(yīng)用和元服務(wù)的重要展示形式,憑借將關(guān)鍵信息和核心操作前置,實(shí)現(xiàn)服務(wù)直達(dá)、減少跳轉(zhuǎn)層級的體驗(yàn)效果,備受用戶和開發(fā)者青睞。但傳統(tǒng)
    的頭像 發(fā)表于 01-13 13:44 ?1344次閱讀
    效率大升!AI賦能鴻蒙萬能<b class='flag-5'>卡片</b><b class='flag-5'>開發(fā)</b>

    HarmonyOS開發(fā)指導(dǎo)類文檔更新速遞(下)

    伴隨著HarmonyOS 5.0.0 Release、HarmonyOS 5.0.1 Release版本的發(fā)布,HarmonyOS官網(wǎng)文檔也帶來了不少上新內(nèi)容。本期HarmonyOS
    的頭像 發(fā)表于 12-30 09:54 ?2081次閱讀
    <b class='flag-5'>HarmonyOS</b><b class='flag-5'>開發(fā)</b>指導(dǎo)類文檔更新速遞(下)

    SSM框架在Java開發(fā)中的應(yīng)用 如何使用SSM進(jìn)行web開發(fā)

    SSM框架,即Spring、SpringMVC和MyBatis的整合,是Java Web開發(fā)中常用的技術(shù)棧。它通過分層架構(gòu),實(shí)現(xiàn)了視圖、控制、業(yè)務(wù)邏輯和數(shù)據(jù)訪問的分離,提高了代碼的可維護(hù)性和可擴(kuò)展性
    的頭像 發(fā)表于 12-16 17:28 ?2077次閱讀

    【「HarmonyOS NEXT啟程:零基礎(chǔ)構(gòu)建純血鴻蒙應(yīng)用」閱讀體驗(yàn)】+ 8-10章有感

    還是需要大家去多操作這一章。 我們可用看到在這里選擇服務(wù)卡片后的效果。添加服務(wù)卡片是為了打開元服務(wù)。 后面介紹了
    發(fā)表于 12-05 20:18