Skip to content
Back to skills

Hmos Networkboost Kit Netmultipath Statechangecallback

ASecurity

监听多网状态变化事件,感知可用网络链路状态和变化原因,支持多网并发场景,适用于网络切换、多网传输优化

  • 2 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added September 22, 2026
developmenttypescriptapi

Works with

  • api

Security analysis

A100/100

Pro scans all 4 files and shows the line behind each finding

Scanned September 22, 2026

npx -y skills add IsKenKenYa/skills --skill hmos-networkboost-kit-netmultipath-statechangecallback --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Hmos Networkboost Kit Netmultipath Statechangecallback?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Hmos Networkboost Kit Netmultipath Statechangecallback
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/iskenkenya-hmos-networkboost-kit-netmultipath-statechangecall/badge)](https://www.skillsdirectory.com/skills/iskenkenya-hmos-networkboost-kit-netmultipath-statechangecall)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: hmos-networkboost-kit-netmultipath-statechangecallback
description: 监听多网状态变化事件,感知可用网络链路状态和变化原因,支持多网并发场景,适用于网络切换、多网传输优化
---

# 多网状态监听技能

## 功能描述

本技能提供HarmonyOS多网状态监听能力,通过订阅`multiPathStateChange`事件,实时感知多网链路的状态变化、变化原因、链路类型等信息,帮助应用在多网并发场景下优化数据传输策略。支持监听多网的建立、释放、挂起、恢复等状态变化,以及获取链路的NetHandle、路径状态、路径类型等详细信息。

## 使用场景

### 触发词
- "监听多网状态"
- "多网状态变化"
- "多网链路状态"
- "感知网络切换"
- "多网并发监听"
- "NetworkBoost多网监听"

### 能做
- 订阅多网状态变化事件
- 获取多网状态(空闲、建立中、已建立、释放中)
- 获取多网链路状态(空闲、已连接、挂起)
- 获取多网变化原因(正常请求/释放、网络原因、配额耗尽、功耗限制等)
- 获取多网链路的NetHandle和路径类型信息
- 取消订阅多网状态变化事件

### 绝不做
- 不用于监听单一网络状态(应使用Network Kit的connection模块)
- 不用于主动发起多网请求(应使用requestMultiPath接口)
- 不用于主动释放多网(应使用releaseMultiPath接口)
- 不用于监听连接迁移事件(应使用handoverChange事件)
- 不用于获取网络质量信息(应使用netQuality模块)

### 补充
- 需要申请`ohos.permission.LINKTURBO`权限
- 仅支持API version 6.0.0(20)及以上版本
- 回调函数在多网状态变化时被系统调用,应用需要及时处理回调信息
- 在应用退出或业务流程结束时,必须取消订阅以释放资源

## 调用规范和规则

### 输入约束
- 回调函数类型必须为`Callback<MultiPathStateInfo>`
- type参数必须为字符串`'multiPathStateChange'`
- 取消订阅时callback参数可选,不提供则取消所有订阅

### 执行约束
- 最大订阅数量:无限制,但建议不超过10个订阅
- 回调函数执行时间:应控制在100ms内,避免阻塞
- API调用频次:无限制,但建议避免频繁订阅/取消订阅

### 内容约束
- 禁止在回调函数中执行耗时操作(如网络请求、文件IO)
- 禁止在回调函数中修改MultiPathStateInfo对象
- 禁止在回调函数中调用阻塞API
- 回调函数必须处理所有可能的MultiPathState枚举值

### 降级约束
- 权限申请失败:提示用户授予LINKTURBO权限,降级为不监听多网状态
- API不支持:检查API版本,降级为使用单网模式
- 回调函数异常:记录错误日志,继续监听但不处理异常回调
- 系统服务异常:等待系统恢复后重新订阅

## 调用流程和步骤

### 步骤1:准备阶段

**前置校验**:
1. 检查设备API版本是否≥6.0.0(20)
2. 检查是否已申请`ohos.permission.LINKTURBO`权限
3. 检查回调函数是否符合`Callback<MultiPathStateInfo>`类型

**参数准备**:
```typescript
import { netHandover } from '@kit.NetworkBoostKit';
import { BusinessError } from '@kit.BasicServicesKit';

const stateChangeCallback = (data: netHandover.MultiPathStateInfo) => {
  // 回调函数逻辑
};
```

### 步骤2:订阅多网状态变化

**示例代码**:
```typescript
import { netHandover } from '@kit.NetworkBoostKit';
import { BusinessError } from '@kit.BasicServicesKit';

try {
  netHandover.on('multiPathStateChange', (data: netHandover.MultiPathStateInfo) => {
    console.info("on multiPathStateChange: " + JSON.stringify(data));
    
    // 处理多网状态变化
    switch (data.multiPathState) {
      case netHandover.MultiPathState.MULTIPATH_IDLE:
        console.info('多网处于空闲状态');
        break;
      case netHandover.MultiPathState.MULTIPATH_CREATING:
        console.info('多网正在建立中');
        break;
      case netHandover.MultiPathState.MULTIPATH_CREATED:
        console.info('多网已建立');
        // 可以开始使用多网链路传输数据
        break;
      case netHandover.MultiPathState.MULTIPATH_RELEASING:
        console.info('多网正在释放中');
        break;
    }
    
    // 处理链路状态
    console.info('链路状态: ' + data.pathState);
    console.info('链路类型: ' + data.pathType);
    console.info('变化原因: ' + data.cause);
    console.info('NetHandle: ' + JSON.stringify(data.netHandle));
  });
} catch (err) {
  const error = err as BusinessError;
  console.error('订阅失败 errCode: ' + error.code + ', errMessage: ' + error.message);
}
```

### 步骤3:错误处理

```typescript
import { netHandover } from '@kit.NetworkBoostKit';
import { BusinessError } from '@kit.BasicServicesKit';

try {
  netHandover.on('multiPathStateChange', (data: netHandover.MultiPathStateInfo) => {
    console.info("多网状态变化: " + JSON.stringify(data));
  });
} catch (err) {
  const error = err as BusinessError;
  switch (error.code) {
    case 201:
      console.error('权限校验失败,请申请ohos.permission.LINKTURBO权限');
      // 降级处理:提示用户授予权限
      break;
    case 1013600001:
      console.error('内部处理异常,请稍后重试');
      // 降级处理:等待一段时间后重新订阅
      break;
    case 1013600002:
      console.error('系统处理异常,网络管理服务未启动');
      // 降级处理:等待系统恢复后重新订阅
      break;
    default:
      console.error('未知错误: ' + error.message);
      // 降级处理:记录日志,使用单网模式
  }
}
```

### 步骤4:取消订阅

```typescript
import { netHandover } from '@kit.NetworkBoostKit';
import { BusinessError } from '@kit.BasicServicesKit';

try {
  // 取消所有订阅
  netHandover.off('multiPathStateChange');
  console.info('取消多网状态监听成功');
} catch (err) {
  const error = err as BusinessError;
  console.error('取消订阅失败 errCode: ' + error.code + ', errMessage: ' + error.message);
}
```

### 步骤5:降级处理

```typescript
import { netHandover } from '@kit.NetworkBoostKit';
import { BusinessError } from '@kit.BasicServicesKit';

let isSubscribed = false;
let retryCount = 0;
const maxRetryCount = 3;

async function subscribeMultiPathState(): Promise<void> {
  try {
    netHandover.on('multiPathStateChange', handleMultiPathStateChange);
    isSubscribed = true;
    console.info('多网状态监听订阅成功');
  } catch (err) {
    const error = err as BusinessError;
    console.error('订阅失败: ' + error.message);
    
    if (retryCount < maxRetryCount) {
      retryCount++;
      console.info('等待5秒后重试,当前重试次数: ' + retryCount);
      await new Promise(resolve => setTimeout(resolve, 5000));
      await subscribeMultiPathState();
    } else {
      console.warn('已达最大重试次数,降级为单网模式');
      // 降级处理:使用单网模式,不监听多网状态
    }
  }
}

function handleMultiPathStateChange(data: netHandover.MultiPathStateInfo): void {
  try {
    console.info('多网状态变化: ' + JSON.stringify(data));
    // 处理状态变化逻辑
  } catch (err) {
    console.error('处理回调异常: ' + (err as Error).message);
    // 不中断监听,继续接收后续回调
  }
}
```

## 错误码说明

| 错误码 | 说明 | 解决方法 |
|-------|------|---------|
| 201 | 权限校验失败,未申请ohos.permission.LINKTURBO权限 | 在module.json5中申请权限:`"requestPermissions": [{"name": "ohos.permission.LINKTURBO"}]` |
| 1013600001 | 内部处理异常,如状态机异常、消息队列阻塞等 | 等待一段时间后重新订阅,或重启应用 |
| 1013600002 | 系统处理异常,如IPC调用失败、网络管理服务未启动 | 检查网络管理服务状态,等待系统恢复后重试 |

## 编译和修复问题

### 依赖声明
```json
{
  "name": "your_app",
  "version": "1.0.0",
  "dependencies": {},
  "requestPermissions": [
    {
      "name": "ohos.permission.LINKTURBO",
      "reason": "用于监听多网状态变化,优化数据传输策略"
    }
  ]
}
```

### 环境要求
- HarmonyOS API version: ≥6.0.0(20)
- DevEco Studio: ≥5.0.0
- 系统能力: SystemCapability.Communication.NetworkBoost.Core

### 常见编译问题

**问题1:权限未声明**
```
Error: Permission ohos.permission.LINKTURBO is not declared
```
**解决方法**:在`entry/src/main/module.json5`中添加权限声明:
```json
"requestPermissions": [
  {
    "name": "ohos.permission.LINKTURBO",
    "reason": "监听多网状态变化"
  }
]
```

**问题2:API版本不支持**
```
Error: API 'netHandover.on' is not supported on this device
```
**解决方法**:检查设备的API版本,确保≥6.0.0(20),在代码中添加版本检查:
```typescript
if (canIUse('SystemCapability.Communication.NetworkBoost.Core')) {
  // 使用多网状态监听
} else {
  console.warn('设备不支持多网状态监听,使用单网模式');
}
```

**问题3:导入模块失败**
```
Error: Cannot find module '@kit.NetworkBoostKit'
```
**解决方法**:确保项目依赖正确配置,检查`build-profile.json5`中的API版本配置。

## 常见问题与解决方法

### Q1:回调函数没有被触发
**原因**:
- 未申请权限或权限未授予
- 多网功能未开启或设备不支持
- 未调用requestMultiPath发起多网请求

**解决方法**:
- 检查权限配置和权限授予状态
- 检查设备API版本是否≥6.0.0(20)
- 确认已调用requestMultiPath发起多网请求

### Q2:取消订阅失败
**原因**:
- 订阅时使用的回调函数与取消订阅时提供的回调函数不一致
- 订阅已经被取消

**解决方法**:
- 取消订阅时不提供callback参数,取消所有订阅:`netHandover.off('multiPathStateChange')`
- 保存订阅时的回调函数引用,取消订阅时传入相同的引用

### Q3:收到MULTIPATH_CHANGE_CAUSE_RELEASE_NO_QUOTA事件
**原因**:应用的多网配额已耗尽

**解决方法**:
- 调用`netHandover.getMultiPathQuotaStats()`查询配额使用情况
- 合理控制多网使用时长和频率
- 在配额不足时释放多网,避免系统强制释放

### Q4:收到MULTIPATH_CHANGE_CAUSE_SUSPEND_ENTER事件
**原因**:多网链路进入挂起状态,无法传输数据

**解决方法**:
- 暂停使用该多网链路传输数据
- 等待MULTIPATH_CHANGE_CAUSE_SUSPEND_LEAVE事件恢复传输
- 或使用其他可用链路传输数据

## 输出结果报告

执行完成后输出以下信息:

```json
{
  "status": "success",
  "subscribed": true,
  "eventName": "multiPathStateChange",
  "permission": "ohos.permission.LINKTURBO",
  "apiUsed": [
    "netHandover.on",
    "netHandover.off"
  ],
  "capability": "SystemCapability.Communication.NetworkBoost.Core",
  "apiVersion": "6.0.0(20)"
}
```

## 参考文档

- [API开发指南](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/networkboost-netmultipath-statechangecallback)
- [API参考说明](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/networkboost-nethandover)

## 完整示例代码

- [ArkTS示例](assets/example_multi_path_state_change.ets)
- [配置文件示例](assets/module.json5)

## 测试用例

### 正向测试用例
- [订阅多网状态监听](tests/test_subscribe_positive.ets):正常订阅并接收状态变化回调
- [取消订阅成功](tests/test_unsubscribe_positive.ets):正常取消订阅并验证回调不再触发
- [处理所有状态类型](tests/test_handle_all_states.ets):验证处理所有MultiPathState枚举值

### 边界测试用例
- [最大订阅数量](tests/test_max_subscriptions.ets):测试订阅多个回调函数
- [回调函数执行时间](tests/test_callback_duration.ets):验证回调函数执行时间限制

### 异常测试用例
- [权限未申请](tests/test_permission_missing.ets):测试未申请权限时的错误处理
- [API版本不支持](tests/test_api_version_unsupported.ets):测试低版本设备的降级处理
- [系统服务异常](tests/test_system_error.ets):测试系统异常时的重试和降级

Files in this skill

  • SUB_SKILL.md12 KB
  • assets/example_multi_path_state_change.ets6.4 KB
  • assets/module.json51.1 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…