鸿蒙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": [
]
}