Intent对象之间传递信息的载体,与Android无太大差异。
构成元素
如图所示:
根据 Ability 的全称启动应用
指定BundleName 与 AbilityName ,即可跳转对应的Ability,其中BundleName为包名,AbilityName为类名。
Intent intent = new Intent();
// 通过 Intent 中的 OperationBuilder 类构造 operation 对象,指定设备标识(空串表示当前设备)、应用包名、Ability 名称
Operation operation = new Intent.OperationBuilder()
.withDeviceId("")
.withBundleName("com.demoapp")
.withAbilityName("com.demoapp.FooAbility")
.build();
intent.setOperation(operation);
startAbility(intent);
对外暴露
处理方
1.首先需要在配置文件config.json中声明对外提供的能力
{
"abilities": [
{
...
"skills":[
{
"actions":[
"ability.intent.TEST"
]
}
]
...
}
]
}
- 在 Ability 1中添加路由导航到对应的 AbilitySlice。
@Override
protected void onStart(Intent intent) {
...
addActionRoute(Intent.ACTION_TEST, TestSlice.class.getName());
...
}
- 在 Ability1 调用 setResult()方法返回结果。
@Override
protected void onActive() {
...
Intent resultIntent = new Intent();
setResult(10, resultIntent); //10为返回的resultCode。
...
}
请求方
构造 Intent 以及对应Action 的 Operation 对象,并调用 startAbilityForResult() 方法发起请求。然后重写 onAbilityResult()回调方法,对请求结果进行处理。
private void test() {
Intent intent = new Intent();
Operation operation = new Intent.OperationBuilder()
.withAction(Intent.ACTION_TEST)
.build();
intent.setOperation(operation);
startAbilityForResult(intent, REQ_CODE_TEST);
}
@Override
protected void onAbilityResult(int requestCode, int resultCode, Intent resultData) {
switch (requestCode) {
case REQ_CODE_TEST:
//处理返回值
...
return;
}
}