鸿蒙Next中scheme协议如何实现应用间通信

在鸿蒙Next系统中,使用scheme协议实现应用间通信的具体步骤是什么?是否需要特殊的配置或权限?能否提供一个简单的代码示例来说明如何注册和调用scheme?另外,这种方式和Intent通信有什么区别,适用场景有哪些?

2 回复

鸿蒙Next中,用scheme协议实现应用间通信,就像给App发“暗号”:

  1. 在config.json里声明uritype,比如"uri": "demo://page/main"
  2. 对方App用wantAgent触发,系统自动匹配跳转
  3. 数据塞在parameters里传递,像偷偷传小纸条

简单说:配置URI → 触发Want → 跨App蹦迪完成!记得在权限里勾选ohos.permission.START_ABILITIES_FROM_BACKGROUND哦~

更多关于鸿蒙Next中scheme协议如何实现应用间通信的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在鸿蒙Next中,Scheme协议是实现应用间通信的一种轻量级方式,通过自定义URI(统一资源标识符)来启动其他应用的特定页面或功能。以下是实现步骤和示例代码:

1. 配置Scheme

在目标应用的module.json5文件中声明Scheme:

{
  "module": {
    "abilities": [
      {
        "name": "EntryAbility",
        "srcEntry": "./ets/entryability/EntryAbility.ets",
        "skills": [
          {
            "entities": ["entity.system.home"],
            "actions": ["action.system.home"],
            "uris": [
              {
                "scheme": "myapp",  // 自定义协议名
                "host": "detail",   // 主机名(可选)
                "port": "8080",     // 端口(可选)
                "path": "page"      // 路径(可选)
              }
            ]
          }
        ]
      }
    ]
  }
}

2. 解析Scheme参数

在目标Ability的onCreateonNewWant中解析URI参数:

import UIAbility from '@ohos.app.ability.UIAbility';
import Want from '@ohos.app.ability.Want';

export default class EntryAbility extends UIAbility {
  onCreate(want: Want) {
    if (want?.uri) {
      const uri = want.uri; // 示例:myapp://detail:8080/page?id=123
      console.log('Received URI:', uri);
      // 解析参数(如ID=123),并跳转到对应页面
    }
  }
}

3. 发起Scheme请求

在调用方应用中,使用startAbility触发目标应用:

import common from '@ohos.app.ability.common';
import { BusinessError } from '@ohos.base';

let context: common.UIAbilityContext = ...; // 获取Ability上下文

const want = {
  uri: 'myapp://detail:8080/page?id=123' // 匹配目标应用声明的Scheme
};

try {
  context.startAbility(want).then(() => {
    console.log('Scheme启动成功');
  }).catch((err: BusinessError) => {
    console.error('启动失败:', err.code);
  });
} catch (error) {
  console.error('异常:', error);
}

关键点:

  • 唯一性:Scheme名称需全局唯一,避免冲突。
  • 参数传递:通过URI的query参数(如?id=123)传递数据。
  • 错误处理:捕获startAbility的异常,处理应用未安装等场景。

适用场景:

  • 应用页面跳转(如商品详情)。
  • 轻量数据传递(如ID、类型)。
  • 无需复杂数据交换的简单通信。

通过以上步骤,可快速实现鸿蒙Next中基于Scheme的应用间通信。

回到顶部