鴻蒙HarmonyOS實戰-Stage模型(ExtensionAbility元件)

蜀道山QAQ發表於2024-05-15

🚀一、ExtensionAbility元件

🔎1.概念

HarmonyOS中的ExtensionAbility元件是一種能夠擴充套件系統功能的能力元件。它可以透過擴充套件系統能力介面,為應用程式提供一些特定的功能,以滿足應用程式的特殊需求。

ExtensionAbility元件的特點包括:

  1. 系統元件:ExtensionAbility是一種系統級元件,可以透過系統能力管理器進行註冊和管理。
  2. 功能擴充套件:ExtensionAbility透過擴充套件系統能力介面,為應用程式提供一些特定的功能,如地理位置、感測器、網路訪問等。
  3. 生命週期管理:ExtensionAbility具有自己的生命週期管理,可以根據應用程式的需要進行啟動、停止和銷燬。
  4. 許可權控制:ExtensionAbility可以透過許可權控制機制限制應用程式對系統能力的訪問許可權,保護使用者的隱私和安全。
  5. 多樣性:HarmonyOS支援多種型別的ExtensionAbility,包括Ability、ServiceAbility、DataAbility等,可以根據應用程式的需求靈活選擇。
    透過使用ExtensionAbility元件,開發者可以更好地與系統進行整合,提供更豐富的功能和體驗。

支援的ExtensionAbility型別有:

image

還有其他可以參考官方文件:https://developer.harmonyos.com/cn/docs/documentation/doc-references-V3/js-apis-bundlemanager-0000001427585060-V3#ZH-CN_TOPIC_0000001573928977__extensionabilitytype

image

🔎2.FormExtensionAbility

FormExtensionAbility為卡片擴充套件模組,提供卡片建立、銷燬、重新整理等生命週期回撥。

🦋2.1 基本概念

import FormExtensionAbility from '@ohos.app.form.FormExtensionAbility';

image

🦋2.2 onAddForm

onAddForm()是卡片提供方接收建立卡片的通知介面,onAddForm方法用於處理新增表單的事件。當應用程式在系統中新增一個新的表單時,系統會呼叫這個方法來通知應用程式。

在onAddForm方法中實現具體的處理邏輯,例如建立表單對應的頁面或者更新現有的表單內容。可以使用FormBindingData物件來獲取表單的資料,FormBindingData物件包含了表單的各個欄位的值。

import FormExtensionAbility from '@ohos.app.form.FormExtensionAbility';
import formBindingData from'@ohos.app.form.formBindingData';

export default class MyFormExtensionAbility extends FormExtensionAbility {
  onAddForm(want) {
    console.log('FormExtensionAbility onAddForm, want:' + want.abilityName);
    let dataObj1 = {
      temperature:'11c',
      'time':'11:00'
    };
    let obj1 = formBindingData.createFormBindingData(dataObj1);
    return obj1;
  }
}

image

🦋2.3 onCastToNormalForm

onCastToNormalForm()是卡片提供方接收臨時卡片轉常態卡片的通知介面,onCastToNormalForm()方法用於將擴充套件表單轉換為普通表單的回撥方法。當使用者選擇將擴充套件表單轉換為普通表單時,系統會呼叫此方法。

在該方法中,開發者可以執行以下操作:

  • 停止擴充套件表單的任何後臺任務或計時器。
  • 釋放擴充套件表單的資源。
  • 將擴充套件表單轉換為普通表單。
export default class MyFormExtensionAbility extends FormExtensionAbility {
  onCastToNormalForm(formId) {
    console.log('FormExtensionAbility onCastToNormalForm, formId:' + formId);
  }
}

image

🦋2.4 onUpdateForm

onUpdateForm()是卡片提供方接收更新卡片的通知介面。獲取最新資料後呼叫formProvider的updateForm介面重新整理卡片資料,

onUpdateForm方法具有以下特點:

  • onUpdateForm方法是在表單資料發生改變時觸發的回撥方法。
  • onUpdateForm方法有兩個引數:引數一為表單的全域性唯一識別符號formId,引數二為表單的資料。
  • onUpdateForm可以透過formId來判斷是哪個表單發生了改變,從而進行相應的處理。
  • onUpdateForm方法中可以對錶單資料進行處理,例如更新UI介面或者進行其他相關操作。
import FormExtensionAbility from '@ohos.app.form.FormExtensionAbility';
import formBindingData from '@ohos.app.form.formBindingData';
import formProvider from '@ohos.app.form.formProvider';

export default class MyFormExtensionAbility extends FormExtensionAbility {
  onUpdateForm(formId) {
    console.log('FormExtensionAbility onUpdateForm, formId: ${formId}');
    let obj2 = formBindingData.createFormBindingData({
      temperature: '22c',
      time: '22:00'
    });
    formProvider.updateForm(formId, obj2).then((data) => {
      console.log('FormExtensionAbility context updateForm, data: ${data}');
    }).catch((error) => {
      console.error('Operation updateForm failed. Cause: ${error}');
    });
  }
};

image

🦋2.5 onChangeFormVisibility

onChangeFormVisibility()是卡片提供方接收修改可見性的通知介面,onChangeFormVisibility方法是在擴充套件頁面的可見性發生變化時被呼叫的回撥方法。當擴充套件頁面從不可見狀態變為可見狀態,或者從可見狀態變為不可見狀態時,該方法會被自動呼叫。

該方法的原型是:

public void onChangeFormVisibility(boolean isVisible)

在方法中,可以根據isVisible引數的值來執行相應的操作。當isVisible為true時,表示擴充套件頁面變為可見狀態,可以進行相關的UI更新和資料載入等操作。當isVisible為false時,表示擴充套件頁面變為不可見狀態,可以進行相關的資源釋放和停止後臺任務等操作。

import FormExtensionAbility from '@ohos.app.form.FormExtensionAbility';
import formBindingData from '@ohos.app.form.formBindingData';
import formProvider from '@ohos.app.form.formProvider';

export default class MyFormExtensionAbility extends FormExtensionAbility {
  onChangeFormVisibility(newStatus) {
    console.log('FormExtensionAbility onChangeFormVisibility, newStatus: ${newStatus}');
    let obj2 = formBindingData.createFormBindingData({
      temperature: '22c',
      time: '22:00'
    });

    for (let key in newStatus) {
      console.log('FormExtensionAbility onChangeFormVisibility, key: ${key}, value= ${newStatus[key]}');
      formProvider.updateForm(key, obj2).then((data) => {
        console.log('FormExtensionAbility context updateForm, data: ${data}');
      }).catch((error) => {
        console.error('Operation updateForm failed. Cause: ${error}');
      });
    }
  }
};

image

🦋2.6 onFormEvent

onFormEvent()是卡片提供方接收處理卡片事件的通知介面,onFormEvent()方法是用來處理表單事件的回撥方法。

表單事件包括表單建立、表單更新和表單銷燬三種型別。當有這些事件發生時,系統會呼叫FormExtensionAbility的onFormEvent()方法,並將相應的事件型別和表單事件物件作為引數傳遞給該方法。

可以重寫onFormEvent()方法,根據事件型別來處理相應的業務邏輯。比如,在表單建立事件中,可以透過表單事件物件獲取表單例項,並進行初始化操作;在表單更新事件中,可以根據表單事件物件獲取更新後的表單資料,並進行介面重新整理等操作;在表單銷燬事件中,可以進行資源釋放等清理工作。

export default class MyFormExtension extends FormExtensionAbility {
  onFormEvent(formId, message) {
    console.log('FormExtensionAbility onFormEvent, formId:' + formId + ', message:' + message);
  }
}

image

🦋2.7 onRemoveForm

onRemoveForm()是卡片提供方接收銷燬卡片的通知介面,onRemoveForm方法用於在擴充套件中移除表單時進行處理。當主應用或者其他應用移除了擴充套件中的一個表單時,該方法會被呼叫。

具體來說,onRemoveForm方法的作用是在表單被移除時執行一些清理工作,例如釋放資源、取消註冊監聽器等等。開發者可以重寫此方法,根據實際需求來進行處理。

export default class MyFormExtensionAbility extends FormExtensionAbility {
  onRemoveForm(formId) {
    console.log('FormExtensionAbility onRemoveForm, formId:' + formId);
  }
}

image

🦋2.8 onConfigurationUpdate

onConfigurationUpdate()是當系統配置更新時呼叫,onConfigurationUpdate方法用於處理配置更新的邏輯。當系統配置(例如螢幕方向、語言等)發生變化時,系統會呼叫該方法。

onConfigurationUpdate方法有一個引數,即新的Configuration物件。開發者可以透過該物件獲取最新的配置資訊,並根據需要進行相應的處理,例如重新載入介面、更新資料等。

class MyFormExtensionAbility extends FormExtensionAbility {
  onConfigurationUpdate(config) {
    console.log('onConfigurationUpdate, config:' + JSON.stringify(config));
  }
}

image

🦋2.9 onAcquireFormState

onAcquireFormState()是卡片提供方接收查詢卡片狀態通知介面,預設返回卡片初始狀態,FormExtensionAbility的onAcquireFormState()方法用於獲取表單的狀態。

具體來說,當擴充套件表單Ability首次啟動時,onAcquireFormState()會被呼叫。開發者可以在此方法中獲取表單的初始狀態,並返回給系統。

import formInfo from '@ohos.app.form.formInfo';
class MyFormExtensionAbility extends FormExtensionAbility {
  onAcquireFormState(want) {
    console.log('FormExtensionAbility onAcquireFormState, want:' + want);
    return formInfo.FormState.UNKNOWN;
  }
}

image

🔎3.WorkSchedulerExtensionAbility

WorkSchedulerExtensionAbility主要是延遲任務排程回撥

🦋3.1 匯入模組

import WorkSchedulerExtensionAbility from '@ohos.WorkSchedulerExtensionAbility'

🦋3.2 onWorkStart

onWorkStart()是延遲任務排程開始回撥,onWorkStart方法是當一個定時任務開始時被呼叫的。當定時任務啟動時,系統會呼叫該方法來執行相關的邏輯操作。

export default class MyWorkSchedulerExtensionAbility extends WorkSchedulerExtensionAbility {
    onWorkStart(workInfo) {
        console.log('MyWorkSchedulerExtensionAbility onWorkStart' + JSON.stringify(workInfo));
    }
}

image

🦋3.3 onWorkStop

onWorkStart()是延遲任務排程開始回撥,onWorkStop方法是在工作排程停止時被呼叫的。在該方法中,開發者可以處理一些在工作停止時需要執行的邏輯。

export default class MyWorkSchedulerExtensionAbility extends WorkSchedulerExtensionAbility {
    onWorkStop(workInfo) {
        console.log('MyWorkSchedulerExtensionAbility onWorkStop' + JSON.stringify(workInfo));
    }
}

image

🚀寫在最後

  • 如果你覺得這篇內容對你還蠻有幫助,我想邀請你幫我三個小忙:
  • 點贊,轉發,有你們的 『點贊和評論』,才是我創造的動力。
  • 關注小編,同時可以期待後續文章ing🚀,不定期分享原創知識。
  • 更多鴻蒙最新技術知識點,請關注作者部落格:https://t.doruo.cn/14DjR1rEY

image

相關文章