在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

用Java開發HarmonyOS服務卡片

OpenHarmony技術社區 ? 來源:OpenHarmony技術社區 ? 作者:賈葉照 ? 2022-04-26 11:04 ? 次閱讀

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

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

卡片常用于嵌入到其他應用(當前只支持系統應用)中作為其界面的一部分顯示,并支持拉起頁面,發送消息等基礎的交互功能。卡片使用方負責顯示卡片。

卡片提供方:開發者僅需作為卡片提供方進行服務卡片內容的開發,控制卡片實際顯示的內容、控件布局以及控件點擊事件。

卡片使用方:顯示卡片內容的宿主應用,控制卡片在宿主中展示的位置。

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

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

服務卡片的運作機制

先上圖:

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

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

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

  • 卡片生命周期管理:對于卡片切換到后臺或者被遮擋時,暫停卡片的刷新;以及卡片的升級/卸載場景下對卡片數據的更新和清理。

  • 卡片使用方對象管理:對卡片使用方的 RPC 對象進行管理,用于使用方請求進行校驗以及對卡片更新后的回調處理。

  • 通信適配層:負責與卡片使用方和提供方進行 RPC 通信。

卡片提供方包含以下模塊:
  • 卡片服務:由卡片提供方開發者實現,開發者實現 onCreateForm、onUpdateForm 和 onDeleteForm 處理創建卡片、更新卡片以及刪除卡片等請求,提供相應的卡片服務。

  • 卡片提供方實例管理模塊:由卡片提供方開發者實現,負責對卡片管理服務分配的卡片實例進行持久化管理。

  • 通信適配層:HarmonyOS SDK 提供,負責與卡片管理服務通信,用于將卡片的更新數據主動推送到卡片管理服務。

服務卡片開發簡介

關于服務卡片的接口說明,Java 卡片與 JS 卡片選型,約束與限制可以去官網上查看:

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

Java 卡片開發

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

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

我們先看看配置文件 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”:默認值是 JS,我們需要更改為“Java”代表是一個 Java 卡片。

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

"scheduledUpdateTime":"10:30",

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

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

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

  • 當取值為正整數 N 時,表示刷新周期為 30*N 分鐘。

"updateEnabled":true,
"updateDuration":1

設置卡片定時刷新,每 30 分鐘更新一次。

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

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

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

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

⑥“portraitLayouts”:表示卡片外觀規格對應的豎向布局文件,與 supportDimensions 中的規格一一對應。僅當卡片類型為 Java 卡片時,需要配置該標簽

⑦“landscapeLayouts”:表示卡片外觀規格對應的橫向布局文件,與 supportDimensions 中的規格一一對應。僅當卡片類型為 Java 卡片時,需要配置該標簽。

MainAbility 中覆寫卡片相關回調函數:
  • onCreateForm(Intent intent)

  • onUpdateForm(long formId)

  • onDeleteForm(long formId)

  • onCastTempForm(long formId)

  • onEventNotify(Map formEvents)

  • onAcquireFormState(Intent intent)

當卡片使用方請求獲取卡片時,卡片提供方會被拉起并調用 onCreateForm(Intent intent) 回調,intent 中會帶有卡片 ID,卡片名稱,臨時卡片標記和卡片外觀規格信息。

代碼如下:
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);
//卡片規格
intdimension=intent.getIntParam(AbilitySlice.PARAM_FORM_DIMENSION_KEY,DEFAULT_DIMENSION_2X2);
HiLog.info(TAG,"onCreateForm:formId="+formId+",formName="+formName+",dimension="+dimension);
//將卡片信息存入數據庫
saveFormInfo(formId,formName,dimension);

//開發者需要根據卡片的名稱以及外觀規格獲取對應的xml布局并構造卡片對象,此處ResourceTable.Layout_form_weather_widget_2_2
ProviderFormInfoformInfo=newProviderFormInfo(ResourceTable.Layout_form_weather_widget_2_2,this);
//獲取此 ProviderFormInfo 對象中包含的ComponentProvider數據。
ComponentProvidercomponentProvider=formInfo.getComponentProvider();
//設置組件的文本內容
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當需要卡片提供方更新數據時(如觸發了定時更新、定點更新或者卡片使用方主動請求更新),卡片提供方獲取最新數據,并調用 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();
//這里更新的值,實際使用中可根據自己項目要求設置,比如:隨機獲取一個值
componentProvider.setText(ResourceTable.Id_weather_text,"天氣:多云轉晴");
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");
}
}
}

定時更新效果:

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

總結

實際項目中需要通過網絡獲取數據,這里只是簡單的模擬數據。

只是簡單說明了服務卡片創建的回調方法實現,定點和定時數據更新的時機和回調方法的實現,下期會更新關于服務卡片信息持久化、卡片控制事件。

審核編輯 :李倩

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • JAVA
    +關注

    關注

    20

    文章

    2983

    瀏覽量

    106467
  • HarmonyOS
    +關注

    關注

    79

    文章

    2005

    瀏覽量

    31773

原文標題:用Java開發HarmonyOS服務卡片

文章出處:【微信號:gh_834c4b3d87fe,微信公眾號:OpenHarmony技術社區】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    HarmonyOS NEXT 原生應用/元服務調試概述

    開發者更方便、高效地調試應用/元服務HarmonyOS應用/元服務調試支持使用真機設備、模擬器、預覽器調試。接下來以使用真機設備為例進行說明,詳細的調試流程如下圖所示: 1.配置簽
    發表于 02-26 11:03

    效率大升!AI賦能鴻蒙萬能卡片開發

    萬能卡片,作為鴻蒙生態應用和元服務的重要展示形式,憑借將關鍵信息和核心操作前置,實現服務直達、減少跳轉層級的體驗效果,備受用戶和開發者青睞。但傳統
    的頭像 發表于 01-13 13:44 ?441次閱讀
    效率大升!AI賦能鴻蒙萬能<b class='flag-5'>卡片</b><b class='flag-5'>開發</b>

    HarmonyOS開發指導類文檔更新速遞(下)

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

    HarmonyOS NEXT應用元服務開發Intents Kit(意圖框架服務)綜述

    一、綜述 Intents Kit(意圖框架服務)是HarmonyOS級的意圖標準體系 ,意圖連接了應用/元服務內的業務功能。 意圖框架能幫開發者將應用/元
    發表于 11-28 10:43

    HarmonyOS NEXT應用元服務開發Intents Kit(意圖框架服務)習慣推薦方案開發者測試

    意圖框架向開發者提供真機測試能力,即開發者可連接設備進行調測。開發者完成代碼開發之后,功能正式上架應用市場前,可以在HarmonyOS NE
    發表于 11-25 17:37

    HarmonyOS NEXT應用元服務開發Intents Kit(意圖框架服務)習慣推薦方案概述

    一、習慣推薦是HarmonyOS學習用戶的行為習慣后做出的主動預測推薦。 1.開發者將用戶在應用/元服務內的使用行為向HarmonyOS共享,使得H
    發表于 11-19 17:59

    HarmonyOS NEXT應用元服務開發Intents Kit(意圖框架服務)事件推薦開發者測試

    意圖框架向開發者提供真機測試能力,即開發者可連接設備進行調測。開發者完成代碼開發之后,功能正式上架應用市場前,可以在HarmonyOS NE
    發表于 11-18 17:39

    鴻蒙原生開發手記:02-服務卡片開發

    介紹 服務卡片是一直桌面小組件,可以放置在桌面上等位置,一觸即達。 服務卡片分為靜態卡片和動態卡片
    發表于 11-14 17:48

    HarmonyOS NEXT應用元服務開發Intents Kit(意圖框架服務)事件推薦接入方案

    一、方案概述 當開發者有事件想要通知到用戶時,可通過應用/元服務的云側服務器向智慧分發平臺推送事件內容(意圖共享)。系統通過智慧決策判斷事件發生的條件,在滿足條件時,向用戶推薦事件提醒卡片
    發表于 11-14 15:26

    HarmonyOS NEXT應用元服務開發Intents Kit(意圖框架服務)事件推薦方案概述

    一、概述 事件推薦是應用/元服務有新的動態產生且滿足推薦規則時給用戶做出的主動推薦。實現事件推薦需要開發者將事件信息共享給意圖框架,當滿足事件推送規則時,會在小藝建議入口向指定用戶推薦該事件提醒卡片
    發表于 11-13 10:38

    HarmonyOS NEXT應用元服務開發Intents Kit(意圖框架服務)本地搜索方案概述

    一、概述 本地搜索是在HarmonyOS歸一化搜索特性,開發者將應用/元服務內的功能和內容通過意圖框架共享到HarmonyOS,即可實現“一步搜索,內容直達”。 二、典型場景 以“音樂
    發表于 11-06 10:59

    HarmonyOS Next元服務開發快速入門案例

    項目代碼gitee地址: (https://gitee.com/li-yangshui-and-jiaolong/HarmonyOS-Next-AtomicService/tree/master
    發表于 10-08 10:51

    HarmonyOS大咖問答探討-鴻蒙原生應用元服務上架

    【精彩活動】大咖問答活動·第8期 HDE李洋老師與大家探討“鴻元服務開發及上架”相關的技術疑問,速速圍觀,在本帖下方評論,就有機會領取好禮,收獲驚喜,即刻參與吧! https
    發表于 08-13 16:53

    服務體驗-服務管理與分享

    服務管理 通過桌面、負一屏、應用市場、元服務等場景對元服務進行添加、收藏、移除等管理操作。 服務分享 元服務
    發表于 07-16 15:43

    HarmonyOS NEXT Developer Beta1最新術語表

    服務 原名原子化服務,是HarmonyOS提供的一種面向未來的服務提供方式,是有獨立入口的(用戶可通過點擊服務
    發表于 06-27 16:16
    主站蜘蛛池模板: 色宅男午夜电影在线观看 | 老师我好爽再深一点好大 | 韩国三级无遮挡床戏视频 | аⅴ资源中文在线天堂 | 一区二区三区亚洲 | 中文字幕在线播放一区 | 日日干狠狠干 | 啪啪大片 | 国产精品视频一区二区三区 | 天天干天天色综合网 | 国产一区精品视频 | 日本亚洲精品色婷婷在线影院 | 三级在线免费观看 | 免费观看黄色在线视频 | h在线免费观看 | 天天免费 | 福利午夜 | 亚洲一区二区免费视频 | h小视频在线观看网 | 788gao这里只有精品 | 一区二区视屏 | 一本一本大道香蕉久在线精品 | 色五月在线视频 | 欧美一区高清 | 天堂8在线官网 | 97色在线播放 | 天天爽夜夜 | 日本成人福利视频 | 中文字幕一二三四区2021 | 欧美午夜影视 | 久久国产精品免费网站 | 色天使久久综合网天天 | 国产精品资源在线 | 日本久久综合视频 | 日本不卡视频在线视频观看 | www.狠狠艹| 日本免费一级 | 婷婷在线观看网站 | 六月丁香综合网 | 午夜免费免费啪视频观看 | brazzersvideosex欧美最 |