自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

HarmonyOS - 服務(wù)卡片進(jìn)階之二

系統(tǒng) OpenHarmony
Java卡片當(dāng)前通過IntentAgent能力支持對(duì)卡片控制設(shè)置事件,例如可以使用START_ABILITY、START_SERVICE這兩類能力,在點(diǎn)擊整張卡片時(shí),跳轉(zhuǎn)到提供卡片的ability。

??想了解更多關(guān)于開源的內(nèi)容,請(qǐng)?jiān)L問:??

??51CTO 開源基礎(chǔ)軟件社區(qū)??

??https://ost.51cto.com??

前言

繼 HarmonyOS - 服務(wù)卡片進(jìn)階(一)之后,補(bǔ)充關(guān)于服務(wù)卡片信息持久化、卡片控制事件的內(nèi)容。

服務(wù)卡片信息持久化

因大部分卡片提供方都不是常駐服務(wù),只有在需要使用時(shí)才會(huì)被拉起獲取卡片信息。且卡片管理服務(wù)支持對(duì)卡片進(jìn)行多實(shí)例管理,卡片ID對(duì)應(yīng)實(shí)例ID,因此若卡片提供方支持對(duì)卡片數(shù)據(jù)進(jìn)行配置,則需要提供方對(duì)卡片的業(yè)務(wù)數(shù)據(jù)按照卡片ID進(jìn)行持久化管理,以便在后續(xù)獲取、更新以及拉起時(shí)能獲取到正確的卡片業(yè)務(wù)數(shù)據(jù)。同時(shí),需要適配onDeleteForm(int formId)卡片刪除通知接口,在其中實(shí)現(xiàn)卡片實(shí)例數(shù)據(jù)的刪除。

和JS卡片相同,需要注意卡片使用方在請(qǐng)求卡片時(shí)傳遞給提供方應(yīng)用的Intent數(shù)據(jù)中存在臨時(shí)標(biāo)記字段,表示此次請(qǐng)求的卡片是否為臨時(shí)卡片,由于臨時(shí)卡片的數(shù)據(jù)具有非持久化的特殊性,某些場(chǎng)景比如卡片服務(wù)框架死亡重啟,此時(shí)臨時(shí)卡片數(shù)據(jù)在卡片管理服務(wù)中已經(jīng)刪除,且對(duì)應(yīng)的卡片ID不會(huì)通知到提供方,所以卡片提供方需要自己負(fù)責(zé)清理長(zhǎng)時(shí)間未刪除的臨時(shí)卡片數(shù)據(jù)。同時(shí)對(duì)應(yīng)的卡片使用方可能會(huì)將之前請(qǐng)求的臨時(shí)卡片轉(zhuǎn)換為常態(tài)卡片。如果轉(zhuǎn)換成功,卡片提供方也需要對(duì)對(duì)應(yīng)的臨時(shí)卡片ID進(jìn)行處理,把卡片提供方記錄的臨時(shí)卡片數(shù)據(jù)轉(zhuǎn)換為常態(tài)卡片數(shù)據(jù),防止提供方在清理長(zhǎng)時(shí)間未刪除的臨時(shí)卡片時(shí),把已經(jīng)轉(zhuǎn)換為常態(tài)卡片的臨時(shí)卡片信息刪除,導(dǎo)致卡片信息丟失。

 //臨時(shí)標(biāo)記字段,表示此次請(qǐng)求的卡片是否為臨時(shí)卡片
boolean tempFlag = intent.getBooleanParam(AbilitySlice.PARAM_FORM_TEMPORARY_KEY, false);
  • 常態(tài)卡片:卡片使用方會(huì)持久化的卡片。
  • 臨時(shí)卡片:卡片使用方不會(huì)持久化的卡片。

臨時(shí)卡片轉(zhuǎn)換為常態(tài)卡片觸發(fā)

   protected void onCastTempForm(long formId) {
// 使用方將臨時(shí)卡片轉(zhuǎn)換為常態(tài)卡片觸發(fā),提供方需要做相應(yīng)的處理
super.onCastTempForm(formId);
//todo
}

將創(chuàng)建的卡片信息持久化,以便在下次獲取/更新該卡片實(shí)例時(shí)進(jìn)行使用。

 // 將卡片信息存入數(shù)據(jù)庫(kù)
saveFormInfo(formId, formName, dimension);
private void saveFormInfo(Long formId, String formName, int dimension) {
FormInfo form = new FormInfo(formId, formName, dimension);
DatabaseUtils.insertForm(this, form);
}

關(guān)于OrmDatabase對(duì)象型數(shù)據(jù)庫(kù)部分我們可以參考肖瑜博老師我們帶來(lái)的??HarmonyOS-十分鐘教會(huì)數(shù)據(jù)庫(kù)快速上手??這篇文章,里面詳細(xì)介紹了關(guān)于對(duì)象型數(shù)據(jù)庫(kù)的配置、創(chuàng)建數(shù)據(jù)庫(kù)、表、對(duì)應(yīng)實(shí)體類的屬性以及ormContext的創(chuàng)建。

Java卡片控制事件

Java卡片當(dāng)前通過IntentAgent能力支持對(duì)卡片控制設(shè)置事件,例如可以使用START_ABILITY、START_SERVICE這兩類能力,在點(diǎn)擊整張卡片時(shí),跳轉(zhuǎn)到提供卡片的ability。(注:Intent中支持自定義參數(shù)的傳遞,支持的類型有int/long/String/List)。

 // 獲取ComponentProvider,渲染卡片界面
@Override
protected ProviderFormInfo onCreateForm(Intent intent) {
HiLog.info(TAG, "onCreateForm");
// 卡片id
long formId = intent.getLongParam(AbilitySlice.PARAM_FORM_IDENTITY_KEY, INVALID_FORM_ID);
// 卡片名稱
String formName = intent.getStringParam(AbilitySlice.PARAM_FORM_NAME_KEY);
// 卡片規(guī)格
int dimension = intent.getIntParam(AbilitySlice.PARAM_FORM_DIMENSION_KEY, DEFAULT_DIMENSION_2X2);
HiLog.info(TAG, "onCreateForm: formId=" + formId + ",formName=" + formName + ",dimension=" + dimension);
// 將卡片信息存入數(shù)據(jù)庫(kù)
saveFormInfo(formId, formName, dimension);
// 開發(fā)者需要根據(jù)卡片的名稱以及外觀規(guī)格獲取對(duì)應(yīng)的xml布局并構(gòu)造卡片對(duì)象,此處ResourceTable.Layout_form_weather_widget_2_2
ProviderFormInfo formInfo = new ProviderFormInfo(ResourceTable.Layout_form_weather_widget_2_2, this);
//獲取此 ProviderFormInfo 對(duì)象中包含的ComponentProvider數(shù)據(jù)。
ComponentProvider componentProvider = 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");
// 針對(duì)title控件設(shè)置事件
componentProvider.setIntentAgent(ResourceTable.Id_weather_text, startAbilityIntentAgent());
//將ComponentProvider中指定的操作合并到此ProviderFormInfo對(duì)象中包含的 ComponentProvider 對(duì)象中
formInfo.mergeActions(componentProvider);
return formInfo;
}

以上我們可以通過componentProvider 的setIntentAgent方法給卡片上的組件設(shè)置點(diǎn)擊事件,第一個(gè)參數(shù)為組件的資源id,第二個(gè)參數(shù)為IntentAgent對(duì)象,示例代碼如下:

componentProvider.setIntentAgent(ResourceTable.Id_weather_text, startAbilityIntentAgent());

獲取IntentAgent對(duì)象,示例代碼如下:

 private IntentAgent startAbilityIntentAgent() {
Intent intent = new Intent();
Operation operation = new Intent.OperationBuilder()
.withDeviceId("")
.withBundleName("com.example.weatherservicecard")
.withAbilityName("com.example.weatherservicecard.MainAbility")
.build();
intent.setOperation(operation);
List<Intent> intentList = new ArrayList<>();
intentList.add(intent);
IntentAgentInfo paramsInfo = new IntentAgentInfo(200, IntentAgentConstant.OperationType.START_ABILITY, IntentAgentConstant.Flags.UPDATE_PRESENT_FLAG, intentList, null);
IntentAgent intentAgent = IntentAgentHelper.getIntentAgent(this, paramsInfo);
return intentAgent;
}

通過以上方式,我們就可以給卡片的每個(gè)組件設(shè)置點(diǎn)擊事件,跳轉(zhuǎn)到不同的頁(yè)面了。

IntentAgentInfo方法參數(shù)解說:

public IntentAgentInfo(int requestCode, IntentAgentConstant.OperationType operationType, List < IntentAgentConstant.Flags > flags, List < Intent > intents, IntentParams extraInfo)。

參數(shù)說明

  • requestCode:表示要設(shè)置的請(qǐng)求代碼。它是用戶定義的私有值。
  • operationType:指示 IntentAgent 對(duì)象要執(zhí)行的操作的類型。取值范圍詳見IntentAgentConstant.OperationType。
  • flags: 指示用于處理 IntentAgent 的標(biāo)志。取值范圍詳見IntentAgentConstant.Flags。
  • intents: 指示用于創(chuàng)建 IntentAgent 對(duì)象的 Intent 對(duì)象的集合。集合中的意圖數(shù)量由IntentAgentConstant.OperationType確定。
  • extraInfo:指示用于創(chuàng)建 IntentAgent 對(duì)象的額外信息。

總結(jié)

1.卡片信息持久化目的是在使用方刪除/定時(shí)定點(diǎn)更新卡片時(shí),提供方能夠根據(jù)卡片的ID刪除/更新對(duì)應(yīng)的業(yè)務(wù)數(shù)據(jù),還有就是針對(duì):

  • 臨時(shí)卡片:卡片提供方需要自己負(fù)責(zé)清理長(zhǎng)時(shí)間未刪除的臨時(shí)卡片數(shù)據(jù)。
  • 臨時(shí)卡片轉(zhuǎn)換為常態(tài)卡片:防止提供方在清理長(zhǎng)時(shí)間未刪除的臨時(shí)卡片時(shí),把已經(jīng)轉(zhuǎn)換為常態(tài)卡片的臨時(shí)卡片信息刪除,導(dǎo)致卡片信息丟失。

2.卡片控制事件目的是實(shí)際應(yīng)用中可能需要針對(duì)卡片中的各個(gè)組件設(shè)置對(duì)應(yīng)的點(diǎn)擊事件,跳轉(zhuǎn)不同的頁(yè)面。具體使用見以上說明。

關(guān)于原子化服務(wù)卡片信息分享暫時(shí)在這里告一段落了,以后若遇到服務(wù)卡片的其它應(yīng)用場(chǎng)景會(huì)繼續(xù)補(bǔ)充,謝謝!

??想了解更多關(guān)于開源的內(nèi)容,請(qǐng)?jiān)L問:??

??51CTO 開源基礎(chǔ)軟件社區(qū)??

??https://ost.51cto.com??。

責(zé)任編輯:jianghua 來(lái)源: 鴻蒙社區(qū)
相關(guān)推薦

2022-04-24 15:26:38

服務(wù)卡鴻蒙

2021-09-15 10:19:15

鴻蒙HarmonyOS應(yīng)用

2021-07-22 08:45:47

鴻蒙HarmonyOS應(yīng)用

2021-08-23 10:12:41

鴻蒙HarmonyOS應(yīng)用

2021-06-21 15:21:52

鴻蒙HarmonyOS應(yīng)用開發(fā)

2021-07-20 09:58:16

鴻蒙HarmonyOS應(yīng)用

2021-08-18 10:06:33

鴻蒙HarmonyOS應(yīng)用

2022-04-14 11:35:01

HarmonyOS手表Demo操作系統(tǒng)

2021-07-28 14:59:08

鴻蒙HarmonyOS應(yīng)用

2021-08-20 14:23:14

鴻蒙HarmonyOS應(yīng)用

2023-08-04 17:24:43

2023-11-16 09:47:55

ArkTS鴻蒙

2021-09-18 09:57:20

鴻蒙HarmonyOS應(yīng)用

2022-02-11 14:02:09

游戲JS鴻蒙

2023-09-13 15:27:14

鴻蒙應(yīng)用元服務(wù)

2022-03-04 15:43:36

文件管理模塊Harmony鴻蒙

2023-09-18 15:12:47

服務(wù)卡片ArkTS

2023-06-20 15:45:15

服務(wù)卡片鴻蒙

2021-08-23 11:03:54

鴻蒙HarmonyOS應(yīng)用

2021-10-11 11:58:41

Channel原理recvq
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)