Administrator
发布于 2024-04-30 / 20 阅读
0
0

鸿蒙隐士意图|隐士want

鸿蒙App 通过隐式want,可启动另个App。和安卓相似。

1.目标应用,配置文件配置action,entities,uri,type

2.启动应用,通过2步

new Want(action,entities,uri,type)context.startAbility(want)

这里要注意的action,entities,uri,type 的匹配规则

匹配规则

说明,skill 指目标应用中module5.json 中的配置项;want 指启动方app

action匹配规则
entities匹配规则:
uri和type匹配规则

uri解释

uri:表示与Want中uris相匹配的集合

scheme:标识URI的协议名部分,常见的有http、https、file、ftp等。

host:标识URI的主机地址部分,该字段在scheme存在时才有意义。常见的方式:

- 域名方式,如example.com

- IP地址方式,如10.10.10.1。

port:标识URI的端口部分。如http默认端口为80,https默认端口是443,ftp默认端口是21。该字段在scheme和host都存在时才有意义。

path:标识URI的路径部分,path标识URI与want中的路径部分全匹配

示例代码:

配置部分:entry/src/main/module.json5

"abilities": [
      {
        "name": "EntryAbility",
        ......
        "skills": [
          {
//            "entities": [
//              "entity.system.home",
//            ],
            "actions": [
              "action.system.home"
//            ,'ohos.want.action.viewData'
//            , "ohos.want.action.sendData"
            ],
            "uris": [
              {
                "scheme": "https",
                "host": "www.test.com",
                "path": "query/teacher",
                "type": "text/*",
                "port": "8080"
              }
            ]
          }
        ]
      }

启动应用 : 创建want,startAbility
let parameters:Record<string,string> = {  }
parameters["key"] = "hello" 
let want: Want = {
  // "action": 'ohos.want.action.viewData',//目标应用配置了,有没有都可以; 目标应用未配置,必须不配置
  // "action":  "action.system.home",//没有也可以
  "uri": "https://www.test.com:8080/query/teacher",
  "type": "text/plain",// 目标有,我没有 ,x | 目标有,我有,ok | 目标没有,我有,ok
  "parameters":parameters//传参

};
this.context.startAbility(want).then(() => {
  this.showToast("成功")
}).catch((e: BusinessError) => {
  this.showToast("失败:" + JSON.stringify(e))
})

说明:uri中的参数根据module.json5中的配置的uris一一对应,scheme://host:port/path的方式。备注:通过want中的uri配置可以跳转其他应用Ability页面

说明:通过parameters::Record<string,string> 对象 可以传参数

目标应用参数获取
export default class EntryAbility extends UIAbility {
	//项目未启动,被打开,回调该方法
  onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {
    hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onCreate');
    hilog.info(0x0000, 'testTag', "2want="+JSON.stringify(want));
  }



	//项目已启动,再次被打开,回调该方法
  onNewWant(want: Want){

    hilog.info(0x0000, 'testTag', "want="+JSON.stringify(want));
  }

	

}

//打印日志:
2want={
    "deviceId": "",
    "bundleName": "com.example.myapplication",
    "abilityName": "EntryAbility",//目标方
    "moduleName": "entry",
    "uri": "https://www.test.com:8080/query/teacher",
    "type": "text/plain",
    "flags": 0,
    "action": "",
    "parameters": {
        "component.startup.newRules": true,
        "debugApp": false,
        "isCallBySCB": false,
        "key": "hello",//这里!!!!
        "mime-type": "text/plain",
        "moduleName": "entry",
        "ohos.aafwk.param.callerAbilityName": "EntryAbility",//启动方
        "ohos.aafwk.param.callerBundleName": "com.example.test",
        "ohos.aafwk.param.callerPid": 2148,
        "ohos.aafwk.param.callerToken": 537544415,
        "ohos.aafwk.param.callerUid": 20020034,
        "ohos.ability.launch.reason": 1,
        "ohos.dlp.params.sandbox": false
    },
    "entities": [
        
    ]
}


评论