鸿蒙(HarmonyOS)-Fa应用【Js页面】启动一个指定的Ability(分布式拉起)

无需要导入模块

需要权限

ohos.permission.DISTRIBUTED_DATASYNC

FeatureAbility.startAbility(OBJECT)

拉起一个FA,无回调结果。
允许以显式的方式,拉起远程或本地的FA。

  • OBJECT参数


    OBJECT参数

    image.png
  • 返回值(JSON字符串)


    返回值(JSON字符串)
  • 示例
// caller
export default {
  start() {
    let actionData = {
      uri: 'www.huawei.com'
    };
    let target = {
      bundleName: "com.example.harmonydevsample",
      abilityName: "com.example.harmonydevsample.EntryJSApiAbility",
      data: actionData
    };

    let result = await FeatureAbility.startAbility(target);
    let ret = JSON.parse(result);
    if (ret.code == 0) {
      console.log('success');
    } else {
      console.log('cannot start browing service, reason: ' + ret.data);
    }
  }
}

// callee
export default {
  data: {
    contact: "contact information",
    location: "location information"
  }
}
FeatureAbility.startAbilityForResult(OBJECT)

拉起另一个FA的能力(本地),并在回调中等待被拉起FA的结果返回。
如:一个没有定位功能的FA可以调用另一个有能力的FA,调用地图并且获得用户在地图上选择的位置。
它跟FeatureAbility.startAbility的区别在于结果是在被拉起的FA消亡后再返回结果。

  • 示例
    下面的示例展示了一个ability如何拉起另一个ability,并在另一个ability退出时拿到其中的数据。
// caller
export default {
    data: {
        startAbilityForResultExplicitResult: 'NA'
    },
    startAbilityForResultExplicit: async function() {
        var result = await FeatureAbility.startAbilityForResult({
          bundleName: "com.example.harmonydevsample",
          abilityName: "com.example.harmonydevsample.EntryJSApiAbility"
        });
        this.startAbilityForResultExplicitResult = JSON.stringify(result);
    }
}

// callee
export default {
    onShow() {
        let request = {};
        request.result = {
          contact: "contact information",
          location: "location information"
        };
        FeatureAbility.finishWithResult(100, request);
    }
}

FeatureAbility.finishWithResult(OBJECT)

FA调用该接口以主动结束,同时将运行结果作为参数设置。

  • 示例
    该FA被调起并在结束后返回开发者设置的信息:
export default {
    onShow() {
        let request = {};
        request.result = {
          contact: "contact information",
          location: "location information"
        };
        FeatureAbility.finishWithResult(100, request);
    }
}

onNewRequest()

该回调用于处理FA已经启动时收到新的请求,如其他FA在本FA已经启动情况下再次通过startAbility向本FA发送请求。
在正常启动流程下,该回调不会被调用。

重点。。。再来讲讲JS调起Ability时,在Ability如何去接收参数???

直接上代码:

 @Override
 public void onStart(Intent intent) {
     Object objParams = intent.getParams().getParam("__startParams"); //- JS传过来的值
     ZSONObject Data = ZSONObject.stringToZSON(String.valueOf(objParams)); //- 转换成Zson对象
     System.out.println(Data.getString("uri")); //- 接收第一个示例的actionData数据中的uri参数
}

关于Js传值给Ability接收参数,本文中的 intent.getParams().getParam("__startParams")暂时仅适用本文的案例,关于JS卡片传值给Java层的案例,请参考《鸿蒙(HarmonyOS)-Fa应用【Js卡片】启动一个指定的Ability》

参考文档

你可能感兴趣的:(鸿蒙(HarmonyOS)-Fa应用【Js页面】启动一个指定的Ability(分布式拉起))