在鸿蒙Next(HarmonyOS NEXT)中,可以通过UIAbility的启动机制来打开其他应用的Scheme(类似URL Scheme)。以下是具体步骤和示例代码:
1. 配置目标应用的Scheme
目标应用需在module.json5中声明skills,包含entities和actions,以支持被外部调用:
{
"module": {
"abilities": [
{
"name": "TargetAbility",
"srcEntry": "./ets/targetability/TargetAbility.ets",
"skills": [
{
"entities": ["entity.system.browsable"],
"actions": ["action.system.view"],
"uris": [
{
"scheme": "myapp", // 自定义Scheme,如myapp://
"host": "example"
}
]
}
]
}
]
}
}
2. 调用方使用startAbility打开Scheme
在调用方应用中,通过startAbility方法传入目标Scheme的Want参数:
import { common } from '[@kit](/user/kit).AbilityKit';
import { BusinessError } from '[@kit](/user/kit).BasicServicesKit';
let want: common.Want = {
uri: 'myapp://example/path?key=value' // 完整Scheme路径
};
try {
await context.startAbility(want);
console.info('成功打开目标应用');
} catch (error) {
console.error('打开失败,错误码:', (error as BusinessError).code);
}
3. 处理参数传递
目标应用在UIAbility的onCreate或onNewWant中接收参数:
import { UIAbility } from '[@kit](/user/kit).AbilityKit';
import { hilog } from '[@kit](/user/kit).PerformanceAnalysisKit';
export default class TargetAbility extends UIAbility {
onCreate(want: Want, launchParam: AbilityConstant.LaunchParam) {
let schemeUri = want.uri; // 获取完整Scheme
let parameters = want.parameters; // 获取查询参数
hilog.info(0x0000, 'Tag', '收到Scheme: %{public}s', schemeUri);
}
}
注意事项:
- 权限检查:确保调用方和应用均已声明必要权限(如
ohos.permission.START_ABILITIES_FROM_BACKGROUND)。
- Scheme匹配:目标应用的
uris配置需与调用方传入的Scheme完全匹配(包括scheme、host和可选的path)。
- 错误处理:捕获
startAbility可能抛出的异常(如应用未安装或Scheme不支持)。
通过以上步骤,即可实现在鸿蒙Next中通过Scheme跨应用启动功能。