HarmonyOS鸿蒙Next中FA卡片编辑Ability(formConfigAbility)如何获取卡片信息

HarmonyOS鸿蒙Next中FA卡片编辑Ability(formConfigAbility)如何获取卡片信息 目前我使用的方法是用getWant获取

want.parameters["ohos.extra.param.key.form_identity"]

中的formId信息

但在真机上运行的时候,我发现我的手机获取的formId总是和打开编辑的卡片formId不一致,而在平板就是正常的,这是Bug吗?

不止打开formConfigAbility,用want打开MainAbility也是一样的效果,我应该用什么其他方法获取卡片信息?

出问题的手机是P40 Pro(3.0.0.205(C00E191R3P6)),没问题的平板是MatePad Pro 11 (3.0.0.185(C00E180R5P1patch01))


更多关于HarmonyOS鸿蒙Next中FA卡片编辑Ability(formConfigAbility)如何获取卡片信息的实战教程也可以访问 https://www.itying.com/category-93-b0.html

9 回复

文件结构如下:

cke_287.png

都是默认生成的文件,我在其中修改的代码有:

form.ts

import formBindingData from '@ohos.application.formBindingData';
import formInfo from '@ohos.application.formInfo';
export default {
    onCreate(want) {
        // Called to return a FormBindingData object.
        console.log('Form.ts: ' + JSON.stringify(want))
        let formData = {};
        return formBindingData.createFormBindingData(formData);
    },
    onCastToNormal(formId) {
        // Called when the form provider is notified that a temporary form is successfully
        // converted to a normal form.
    },
    onUpdate(formId) {
        // Called to notify the form provider to update a specified form.
    },
    onVisibilityChange(newStatus) {
        // Called when the form provider receives form events from the system.
    },
    onEvent(formId, message) {
        // Called when a specified message event defined by the form provider is triggered.
    },
    onDestroy(formId) {
        // Called to notify the form provider that a specified form has been destroyed.
    },
    onAcquireFormState(want) {
        // Called to return a {@link FormState} object.
        return formInfo.FormState.READY;
    }
};

index.json

{
  "data": {
    "title": "Hello World"
  },
  "actions": {
    "routerEvent": {
      "action": "router",
      "abilityName": "com.biandangroup.myapplication.MainAbility",
      "params": {
        "message": "add detail"
      }
    }
  }
}

MainAbility/app.ets

import featureAbility from '@ohos.ability.featureAbility';
import hilog from '@ohos.hilog';
export default {
  onCreate() {
    featureAbility.getWant((err, want) => {
      console.log('Form err: ' + JSON.stringify(err))
      console.log('Form want: ' + JSON.stringify(want))
    })
    hilog.info(0x0000, 'testTag', '%{public}s', 'Application onCreate');
  },
  onDestroy() {
    hilog.info(0x0000, 'testTag', '%{public}s', 'Application onDestroy');
  },
}

打印日志如下:

03-31 18:08:19.714 7067-7707/com.biandangroup.myapplication D 03B00/JSApp: app Log: Form.ts: {"flags":0,"parameters":{"ohos.extra.param.key.form_customize":{"empty":false,"params":{"calling_package_name":"com.huawei.android.launcher","isTempCard":true},"unpacked":true},"ohos.extra.param.key.form_dimension":2,"ohos.extra.param.key.form_id":1462230433,"ohos.extra.param.key.form_identity":"51335722621722017","ohos.extra.param.key.form_name":"widget","ohos.extra.param.key.form_temporary":false}}
03-31 18:08:29.816 7067-7999/com.biandangroup.myapplication D 03B00/JSApp: app Log: Form want: {"abilityName":"com.biandangroup.myapplication.MainAbility","bundleName":"com.biandangroup.myapplication","deviceId":"","flags":268435456,"parameters":{"ohos.extra.param.key.form_id":1462230433,"ohos.extra.param.key.form_identity":51335722621722020,"params":"{\"message\":\"add detail\"}"}}

可以看到卡片的ID变化了:51335722621722017=>51335722621722020

更多关于HarmonyOS鸿蒙Next中FA卡片编辑Ability(formConfigAbility)如何获取卡片信息的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


创建卡片的时候打印日志如下:

cke_493.png

app Log: myFormAbility onCreate: 51335721500565875

在设置的卡片编辑Ability中打印日志如下:

cke_3936.png

cke_3529.png

Form want: {“abilityName”:“cn.biandangroup.biandan.FormSettingAbility”,“bundleName”:“cn.biandangroup.biandan”,“deviceId”:"",“flags”:0,“parameters”:{“ohos.extra.param.key.form_identity”:51335721500565870,“ohos.extra.param.key.form_name”:“todolistMiddle”}}

可以看到在创建时Id为51335721500565875的卡片在进入编辑Ability中时,传参为51335721500565870,发生了变化,但是卡片本身的Id没有变,在其他的LifecycleForm生命周期接口中打印依然是51335721500565875

楼主你好,麻烦提供下开发环境信息,api几和sdk版本和相关日志

您好,api和sdk版本都是8,相关日志我稍后回复在楼下。

楼主你好,

你的问题已经反馈给开发者,请耐心等待,

楼主,你好,麻烦提供下这部分交互的完整代码,

又换了个手机(3.0.0.205(C00E190R6P8))也是一样的问题。

在HarmonyOS鸿蒙Next中,FA卡片的formConfigAbility可以通过FormExtensionAbility类来获取卡片信息。具体来说,可以通过重写onCreateForm方法来获取卡片的初始配置信息,或者通过onUpdateForm方法来更新卡片信息。

onCreateForm方法中,可以通过FormBindingData对象来设置卡片的初始数据和布局。FormBindingData对象可以包含卡片的数据和布局信息,开发者可以通过setFormBindingData方法将数据绑定到卡片上。

onUpdateForm方法中,可以通过FormState对象来获取卡片的当前状态,并根据需要进行更新。FormState对象包含了卡片的ID、尺寸、状态等信息,开发者可以通过这些信息来动态更新卡片的内容。

此外,FormExtensionAbility还提供了onDeleteForm方法,用于在卡片被删除时执行清理操作。

总结来说,formConfigAbility通过FormExtensionAbility类及其相关方法来获取和操作卡片信息,包括初始化、更新和删除卡片。

在HarmonyOS鸿蒙Next中,FA卡片的formConfigAbility通过onCreate方法获取卡片信息。具体步骤如下:

  1. 获取FormBindingData:在onCreate方法中,通过FormBindingData对象获取卡片信息。
  2. 解析卡片信息:使用FormBindingData提供的方法解析卡片配置信息,如卡片ID、名称等。
  3. 处理卡片配置:根据解析的信息进行卡片配置和初始化。

示例代码:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    FormBindingData bindingData = (FormBindingData) getIntent().getParcelableExtra(FormBindingData.EXTRA_FORM_BINDING_DATA);
    if (bindingData != null) {
        long formId = bindingData.getFormId();
        String formName = bindingData.getFormName();
        // 处理卡片配置
    }
}

通过上述步骤,formConfigAbility可以获取并处理FA卡片的信息。

回到顶部