Skip to content
Back to skills

Hmos Networkboost Kit Netmultipath Request Release

ASecurity

发起和释放多网并发请求,支持WiFi和蜂窝并发、主卡和副卡并发,并发组合由系统决定,最大配额限制,适用于网络加速、弱网优化场景

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

Works with

  • api

Security analysis

A100/100

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

Scanned September 22, 2026

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

Installs into .claude/skills of the current project.

Are you the author of Hmos Networkboost Kit Netmultipath Request Release?

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

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

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-request-release
description: 发起和释放多网并发请求,支持WiFi和蜂窝并发、主卡和副卡并发,并发组合由系统决定,最大配额限制,适用于网络加速、弱网优化场景
---

# 多网发起和释放技能

## 功能描述

本技能提供HarmonyOS多网并发请求和释放能力,允许应用根据业务需求和系统建议发起多网络加速请求,支持WiFi和蜂窝并发以及主卡和副卡并发。并发组合由系统决定,开发者不能指定。主要功能包括:

- 发起多网请求:通过`requestMultiPath`接口请求系统建立多网并发链路
- 释放多网请求:通过`releaseMultiPath`接口释放已建立的多网并发链路
- 监听多网状态:通过订阅`multiPathStateChange`事件获取多网状态变化信息
- 查询配额信息:通过`getMultiPathQuotaStats`接口查询多网配额使用情况

**关键限制**:
- 主卡和副卡并发需要开启智能切换上网卡开关,并依赖主卡和副卡驻留网络的频点
- 受限于硬件,部分设备不支持双卡场景下的多网并发
- 多网发起需要开启网络加速开关(设置->移动网络->网络加速->允许使用移动数据加速网络)
- 需要申请`ohos.permission.LINKTURBO`权限
- API版本要求:6.0.0(20)及以上

## 使用场景

### 触发词
- "发起多网请求"
- "请求多网并发"
- "释放多网"
- "多网加速"
- "WiFi蜂窝并发"
- "双卡并发"
- "网络加速"
- "弱网优化"

### 能做
- 发起多网并发请求,支持WiFi和蜂窝并发以及主卡和副卡并发
- 释放已建立的多网并发链路
- 监听多网状态变化(建立中、已建立、释放中、空闲)
- 查询多网配额使用情况(已使用次数、时长,剩余次数、时长)
- 订阅系统多网推荐信息

### 绝不做
- 不支持开发者指定并发组合(WiFi+蜂窝或主卡+副卡由系统决定)
- 不支持在不支持多网并发的设备上强制发起多网请求
- 不支持在未开启网络加速开关的情况下发起多网请求
- 不支持超出配额限制的多网请求
- 不支持在功耗限制或流量不足时发起多网请求

### 补充
- 如果要使用的传输协议接口不支持指定网络,则新发起的网络无法使用(如HTTP当前只支持默认网络传输,不支持指定网络)
- 多网请求可能因网络条件、功耗限制、配额耗尽等原因失败,需要处理失败场景
- 多网状态可能因系统策略(功耗、流量、用户操作等)被动释放,需监听状态变化
- 建议在业务流程开始时发起多网请求,在业务流程结束时释放多网请求
- 多网并发期间建议监听`multiPathStateChange`事件以获取状态变化通知

## 调用规范和规则

### 输入约束
- **权限要求**:必须申请`ohos.permission.LINKTURBO`权限
- **系统设置**:必须开启网络加速开关(设置->移动网络->网络加速->允许使用移动数据加速网络)
- **设备支持**:设备硬件需支持多网并发能力
- **API版本**:HarmonyOS 6.0.0(20)及以上
- **回调函数**:必须提供有效的回调函数接收多网请求结果

### 执行约束
- **最大请求次数**:受配额限制,可通过`getMultiPathQuotaStats`查询
- **最大并发时长**:受配额限制,可通过`getMultiPathQuotaStats`查询
- **请求频率限制**:避免频繁发起和释放多网请求(错误码1013620006)
- **业务生命周期**:建议在业务流程结束后及时释放多网,避免长时间占用资源

### 内容约束
- 禁止在后台长时间占用多网资源
- 禁止在多网请求失败后无限制重试
- 禁止忽略多网状态变化事件
- 禁止在多网已激活状态下重复发起请求

### 降级约束
- **网络条件不满足**:提示用户检查网络设置或设备支持情况
- **配额耗尽**:提示用户配额已用完,等待系统刷新配额
- **功耗限制**:提示用户当前功耗限制不允许发起多网,建议稍后重试
- **流量不足**:提示用户流量不足,无法发起多网请求
- **设备不支持**:提示用户当前设备不支持多网并发功能
- **权限不足**:引导用户授予`ohos.permission.LINKTURBO`权限

## 调用流程和步骤

### 步骤1:准备阶段

**前置校验**:
1. 检查设备API版本是否≥6.0.0(20)
2. 检查是否已申请`ohos.permission.LINKTURBO`权限
3. 检查网络加速开关是否已开启
4. (可选)查询多网配额使用情况,确认有剩余配额

**权限申请**:
```typescript
// 在module.json5中声明权限
{
  "module": {
    "requestPermissions": [
      {
        "name": "ohos.permission.LINKTURBO",
        "reason": "用于发起多网并发请求,提升网络性能",
        "usedScene": {
          "abilities": ["EntryAbility"],
          "when": "inuse"
        }
      }
    ]
  }
}
```

**模块导入**:
```typescript
import { netHandover } from '@kit.NetworkBoostKit';
import { BusinessError } from '@kit.BasicServicesKit';
```

### 步骤2:查询配额(可选)

**示例代码**:
```typescript
/**
 * 查询多网配额使用情况
 * @returns 多网配额信息
 */
function checkMultiPathQuota(): netHandover.MultiPathQuota | null {
  try {
    const quota = netHandover.getMultiPathQuotaStats();
    console.info(`已使用次数: ${quota.used.count}, 已使用时长: ${quota.used.duration}秒`);
    console.info(`剩余次数: ${quota.remaining.count}, 剩余时长: ${quota.remaining.duration}秒`);
    
    // 检查是否有剩余配额
    if (quota.remaining.count <= 0) {
      console.warn('多网配额已用完,无法发起多网请求');
      return null;
    }
    
    return quota;
  } catch (err) {
    const error = err as BusinessError;
    console.error(`查询配额失败: errCode=${error.code}, errMessage=${error.message}`);
    return null;
  }
}
```

### 步骤3:订阅多网状态变化(推荐)

**示例代码**:
```typescript
/**
 * 订阅多网状态变化事件
 */
function subscribeMultiPathState(): void {
  try {
    netHandover.on('multiPathStateChange', (data: netHandover.MultiPathStateInfo) => {
      console.info(`多网状态变化: state=${data.multiPathState}, cause=${data.cause}`);
      console.info(`链路类型: ${data.pathType}, 链路状态: ${data.pathState}`);
      
      // 根据状态处理业务逻辑
      switch (data.multiPathState) {
        case netHandover.MultiPathState.MULTIPATH_CREATING:
          console.info('多网正在建立中...');
          break;
        case netHandover.MultiPathState.MULTIPATH_CREATED:
          console.info('多网已建立,可以开始使用');
          break;
        case netHandover.MultiPathState.MULTIPATH_RELEASING:
          console.info('多网正在释放中...');
          break;
        case netHandover.MultiPathState.MULTIPATH_IDLE:
          console.info('多网已释放,处于空闲状态');
          break;
      }
      
      // 根据状态变化原因处理
      handleMultiPathChangeCause(data.cause);
    });
    console.info('多网状态监听已启动');
  } catch (err) {
    const error = err as BusinessError;
    console.error(`订阅多网状态失败: errCode=${error.code}, errMessage=${error.message}`);
  }
}

/**
 * 处理多网状态变化原因
 */
function handleMultiPathChangeCause(cause: netHandover.MultiPathChangeCause): void {
  switch (cause) {
    case netHandover.MultiPathChangeCause.MULTIPATH_CHANGE_CAUSE_RELEASE_NETWORK:
      console.warn('网络原因导致多网释放');
      break;
    case netHandover.MultiPathChangeCause.MULTIPATH_CHANGE_CAUSE_RELEASE_NO_QUOTA:
      console.warn('配额耗尽导致多网释放');
      break;
    case netHandover.MultiPathChangeCause.MULTIPATH_CHANGE_CAUSE_RELEASE_POWER_CONSUMPTION:
      console.warn('功耗原因导致多网释放');
      break;
    case netHandover.MultiPathChangeCause.MULTIPATH_CHANGE_CAUSE_RELEASE_INSUFFICIENT_TRAFFIC:
      console.warn('流量不足导致多网释放');
      break;
    case netHandover.MultiPathChangeCause.MULTIPATH_CHANGE_CAUSE_SUSPEND_ENTER:
      console.warn('多网进入挂起状态,实际链路无法传输数据');
      break;
    case netHandover.MultiPathChangeCause.MULTIPATH_CHANGE_CAUSE_SUSPEND_LEAVE:
      console.info('多网退出挂起状态,链路恢复正常');
      break;
  }
}
```

### 步骤4:发起多网请求

**示例代码**:
```typescript
/**
 * 发起多网请求
 * @returns Promise<boolean> 是否发起成功
 */
async function requestMultiPath(): Promise<boolean> {
  return new Promise((resolve) => {
    try {
      netHandover.requestMultiPath((data: netHandover.MultiPathRequestResult) => {
        console.info(`多网请求结果: ${JSON.stringify(data)}`);
        
        // 检查请求结果
        if (data.result === netHandover.MultiPathErrorResult.MULTIPATH_ERROR_NONE) {
          console.info('多网请求成功');
          resolve(true);
        } else {
          handleMultiPathError(data.result);
          resolve(false);
        }
      });
    } catch (err) {
      const error = err as BusinessError;
      console.error(`发起多网请求失败: errCode=${error.code}, errMessage=${error.message}`);
      handleRequestError(error.code);
      resolve(false);
    }
  });
}

/**
 * 处理多网请求错误结果
 */
function handleMultiPathError(result: netHandover.MultiPathErrorResult): void {
  switch (result) {
    case netHandover.MultiPathErrorResult.MULTIPATH_ERROR_NETWORK_REFUSED:
      console.error('多网请求被网络拒绝');
      break;
    case netHandover.MultiPathErrorResult.MULTIPATH_ERROR_TIMEOUT:
      console.error('多网建立超时');
      break;
    case netHandover.MultiPathErrorResult.MULTIPATH_ERROR_LOCAL:
      console.error('多网建立过程中本地释放');
      break;
  }
}

/**
 * 处理请求异常错误码
 */
function handleRequestError(errorCode: number): void {
  switch (errorCode) {
    case 1013620000:
      console.error('多网功能没有使能');
      break;
    case 1013620001:
      console.error('多网已经激活或者是在激活的过程中');
      break;
    case 1013620002:
      console.error('应用多网请求已经达到上限');
      break;
    case 1013620003:
      console.error('功耗限制不允许发起多网');
      break;
    case 1013620004:
      console.error('限额耗尽');
      break;
    case 1013620005:
      console.error('多网请求场景的冲突');
      break;
    case 1013620006:
      console.error('多网发起太频繁');
      break;
    case 1013620007:
      console.error('没有合适的多网链路可用');
      break;
    case 1013620008:
      console.error('流量不足');
      break;
    case 1013620009:
      console.error('不支持并发');
      break;
  }
}
```

### 步骤5:业务流程执行

**示例代码**:
```typescript
/**
 * 使用多网并发执行业务流程
 */
async function executeBusinessWithMultiPath(): Promise<void> {
  // 1. 检查配额
  const quota = checkMultiPathQuota();
  if (!quota) {
    console.warn('配额不足,使用单网执行业务');
    await executeBusinessWithSinglePath();
    return;
  }
  
  // 2. 订阅多网状态变化
  subscribeMultiPathState();
  
  // 3. 发起多网请求
  const success = await requestMultiPath();
  if (!success) {
    console.warn('多网请求失败,使用单网执行业务');
    await executeBusinessWithSinglePath();
    return;
  }
  
  try {
    // 4. 执行业务逻辑(使用多网并发)
    console.info('开始执行业务流程(多网并发模式)');
    await performBusinessTasks();
    console.info('业务流程执行完成');
  } catch (err) {
    console.error('业务流程执行失败:', err);
  } finally {
    // 5. 释放多网资源
    await releaseMultiPath();
    
    // 6. 取消订阅多网状态变化
    unsubscribeMultiPathState();
  }
}

/**
 * 使用单网执行业务流程(降级方案)
 */
async function executeBusinessWithSinglePath(): Promise<void> {
  console.info('使用单网执行业务流程');
  await performBusinessTasks();
}

/**
 * 执行业务任务(示例)
 */
async function performBusinessTasks(): Promise<void> {
  // 在这里实现具体的业务逻辑
  // 注意:如果要使用的传输协议接口不支持指定网络,则新发起的网络无法使用
  // 例如:HTTP当前只支持默认网络传输,不支持指定网络
  
  // 模拟业务任务
  return new Promise((resolve) => {
    setTimeout(() => {
      console.info('业务任务执行完成');
      resolve();
    }, 2000);
  });
}
```

### 步骤6:释放多网请求

**示例代码**:
```typescript
/**
 * 释放多网请求
 */
async function releaseMultiPath(): Promise<void> {
  try {
    netHandover.releaseMultiPath();
    console.info('多网释放成功');
  } catch (err) {
    const error = err as BusinessError;
    console.error(`释放多网失败: errCode=${error.code}, errMessage=${error.message}`);
    
    // 处理释放错误
    if (error.code === 1013620100) {
      console.warn('多网已经激活,但不是当前应用发起的');
    } else if (error.code === 1013620101) {
      console.warn('多网不在激活态');
    }
  }
}

/**
 * 取消订阅多网状态变化
 */
function unsubscribeMultiPathState(): void {
  try {
    netHandover.off('multiPathStateChange');
    console.info('已取消订阅多网状态变化');
  } catch (err) {
    const error = err as BusinessError;
    console.error(`取消订阅失败: errCode=${error.code}, errMessage=${error.message}`);
  }
}
```

### 步骤7:订阅系统多网推荐(可选)

**示例代码**:
```typescript
/**
 * 订阅系统多网推荐信息
 */
function subscribeMultiPathRecommendation(): void {
  try {
    netHandover.on('multiPathRecommendation', (data: netHandover.MultiPathRecommendationInfo) => {
      console.info(`系统多网推荐: action=${data.action}`);
      
      // 根据系统建议处理
      if (data.action === netHandover.MultiPathAction.MULTIPATH_ACTION_REQUEST) {
        console.info('系统建议发起多网请求');
        // 可以在合适的时机调用 requestMultiPath()
      } else if (data.action === netHandover.MultiPathAction.MULTIPATH_ACTION_RELEASE) {
        console.info('系统建议释放多网请求');
        // 可以在合适的时机调用 releaseMultiPath()
      }
    });
    console.info('多网推荐监听已启动');
  } catch (err) {
    const error = err as BusinessError;
    console.error(`订阅多网推荐失败: errCode=${error.code}, errMessage=${error.message}`);
  }
}

/**
 * 取消订阅系统多网推荐
 */
function unsubscribeMultiPathRecommendation(): void {
  try {
    netHandover.off('multiPathRecommendation');
    console.info('已取消订阅多网推荐');
  } catch (err) {
    const error = err as BusinessError;
    console.error(`取消订阅失败: errCode=${error.code}, errMessage=${error.message}`);
  }
}
```

### 步骤8:完整示例流程

**示例代码**:
```typescript
/**
 * 完整的多网并发使用示例
 */
async function completeMultiPathExample(): Promise<void> {
  console.info('=== 开始多网并发示例 ===');
  
  // 1. 检查配额
  const quota = checkMultiPathQuota();
  if (!quota || quota.remaining.count <= 0) {
    console.warn('配额不足或查询失败,无法使用多网并发');
    return;
  }
  
  // 2. 订阅系统推荐(可选)
  subscribeMultiPathRecommendation();
  
  // 3. 订阅多网状态变化
  subscribeMultiPathState();
  
  // 4. 发起多网请求
  const success = await requestMultiPath();
  if (!success) {
    console.error('多网请求失败');
    // 清理订阅
    unsubscribeMultiPathState();
    unsubscribeMultiPathRecommendation();
    return;
  }
  
  try {
    // 5. 执行业务逻辑
    await performBusinessTasks();
  } finally {
    // 6. 释放多网资源
    await releaseMultiPath();
    
    // 7. 取消订阅
    unsubscribeMultiPathState();
    unsubscribeMultiPathRecommendation();
    
    console.info('=== 多网并发示例结束 ===');
  }
}
```

## 错误码说明

### 通用错误码

| 错误码 | 说明 | 解决方法 |
|--------|------|---------|
| 201 | 权限校验失败 | 在module.json5中申请`ohos.permission.LINKTURBO`权限 |
| 401 | 参数检查失败 | 检查参数类型和格式是否正确 |
| 801 | 设备不支持该API | 检查设备API版本是否≥6.0.0(20) |

### 多网请求错误码

| 错误码 | 说明 | 解决方法 |
|--------|------|---------|
| 1013600001 | 内部处理异常(状态机异常、消息队列阻塞等) | 重试或稍后再试 |
| 1013600002 | 系统处理异常(IPC调用失败、网络管理服务启动失败) | 检查系统服务状态或重启应用 |
| 1013620000 | 多网功能没有使能 | 检查是否开启网络加速开关 |
| 1013620001 | 多网已经激活或正在激活中 | 无需重复请求,等待多网建立完成 |
| 1013620002 | 应用多网请求已达到上限 | 等待配额刷新或释放已占用的多网资源 |
| 1013620003 | 功耗限制不允许发起多网 | 等待功耗条件改善或提示用户稍后重试 |
| 1013620004 | 限额耗尽 | 等待配额刷新或提示用户配额已用完 |
| 1013620005 | 多网请求场景冲突 | 检查是否有其他业务占用多网资源 |
| 1013620006 | 多网发起太频繁 | 避免频繁请求,适当延迟后重试 |
| 1013620007 | 没有合适的多网链路可用 | 检查网络条件(WiFi、蜂窝网络)是否满足 |
| 1013620008 | 流量不足 | 提示用户流量不足或连接WiFi |
| 1013620009 | 不支持并发 | 检查设备是否支持多网并发 |

### 多网释放错误码

| 错误码 | 说明 | 解决方法 |
|--------|------|---------|
| 1013620100 | 多网已激活但不是当前应用发起的 | 无法释放其他应用发起的多网 |
| 1013620101 | 多网不在激活态 | 无需释放,多网已处于空闲状态 |

### 多网请求结果错误

| 错误结果 | 说明 | 解决方法 |
|---------|------|---------|
| MULTIPATH_ERROR_NETWORK_REFUSED | 多网请求被网络拒绝 | 检查网络条件或稍后重试 |
| MULTIPATH_ERROR_TIMEOUT | 多网建立超时 | 检查网络质量或稍后重试 |
| MULTIPATH_ERROR_LOCAL | 多网建立过程中本地释放 | 检查是否有本地操作中断了建立过程 |

### 多网状态变化原因

| 状态变化原因 | 说明 | 处理建议 |
|------------|------|---------|
| MULTIPATH_CHANGE_CAUSE_RELEASE_NETWORK | 网络原因释放多网 | 监听网络状态,网络恢复后重新发起 |
| MULTIPATH_CHANGE_CAUSE_RELEASE_USER_REFUSED | 用户操作开关释放多网 | 提示用户网络加速开关被关闭 |
| MULTIPATH_CHANGE_CAUSE_RELEASE_NO_QUOTA | 配额耗尽释放多网 | 提示用户配额已用完 |
| MULTIPATH_CHANGE_CAUSE_RELEASE_POWER_CONSUMPTION | 功耗原因释放多网 | 提示用户因功耗限制多网被释放 |
| MULTIPATH_CHANGE_CAUSE_RELEASE_INSUFFICIENT_TRAFFIC | 流量原因释放多网 | 提示用户流量不足 |
| MULTIPATH_CHANGE_CAUSE_RELEASE_CONFLICT | 场景冲突释放多网 | 检查是否有其他业务冲突 |
| MULTIPATH_CHANGE_CAUSE_RELEASE_SYS_FUSING | 应用使用不规范被系统释放 | 避免长时间占用多网不释放 |
| MULTIPATH_CHANGE_CAUSE_RELEASE_SYS_DEFAULT | 系统网络状态变化释放多网 | 监听网络状态变化 |
| MULTIPATH_CHANGE_CAUSE_SUSPEND_ENTER | 多网进入挂起状态 | 等待退出挂起或使用单网降级 |
| MULTIPATH_CHANGE_CAUSE_SUSPEND_LEAVE | 多网退出挂起状态 | 可以继续使用多网 |

## 编译和修复问题

### 依赖声明

**module.json5配置**:
```json
{
  "module": {
    "name": "entry",
    "type": "entry",
    "deviceTypes": ["default", "tablet"],
    "pages": ["pages/Index"],
    "abilities": [
      {
        "name": "EntryAbility",
        "srcEntry": "./ets/entryability/EntryAbility.ets",
        "description": "$string:EntryAbility_desc",
        "icon": "$media:icon",
        "label": "$string:EntryAbility_label",
        "exported": true,
        "skills": [
          {
            "entities": ["entity.system.home"],
            "actions": ["action.system.home"]
          }
        ]
      }
    ],
    "requestPermissions": [
      {
        "name": "ohos.permission.LINKTURBO",
        "reason": "$string:linkturbo_permission_reason",
        "usedScene": {
          "abilities": ["EntryAbility"],
          "when": "inuse"
        }
      }
    ]
  }
}
```

**oh-package.json5依赖**:
```json
{
  "dependencies": {
    "@kit.NetworkBoostKit": "latest",
    "@kit.BasicServicesKit": "latest"
  }
}
```

### 环境要求

- **HarmonyOS API版本**:6.0.0(20)及以上
- **DevEco Studio版本**:4.0及以上
- **设备能力**:支持多网并发(WiFi+蜂窝或主卡+副卡)
- **系统设置**:开启网络加速开关(设置->移动网络->网络加速->允许使用移动数据加速网络)

### 常见编译问题

**问题1:权限未声明**
```
Error: Permission denied: ohos.permission.LINKTURBO
```
**解决方法**:在`module.json5`的`requestPermissions`中添加权限声明

**问题2:API版本不匹配**
```
Error: API version mismatch. Required: 20, Current: 12
```
**解决方法**:检查`build-profile.json5`中的`compileSdkVersion`和`targetSdkVersion`是否≥20

**问题3:模块导入失败**
```
Error: Cannot find module '@kit.NetworkBoostKit'
```
**解决方法**:检查`oh-package.json5`中是否声明了依赖,并执行`ohpm install`

**问题4:设备不支持多网并发**
```
Error code: 1013620009, Error message: Not support concurrent
```
**解决方法**:检查设备是否支持多网并发功能,部分设备可能不支持双卡并发

**问题5:网络加速开关未开启**
```
Error code: 1013620000, Error message: MultiPath function not enabled
```
**解决方法**:引导用户开启网络加速开关(设置->移动网络->网络加速->允许使用移动数据加速网络)

## 常见问题与解决方法

### Q1:发起多网请求失败,错误码1013620007(没有合适的多网链路可用)

**原因**:
- WiFi和蜂窝网络同时不可用
- 主卡和副卡不满足并发条件(如插入同运营商卡)
- 设备硬件不支持双卡并发

**解决方法**:
- 检查WiFi和蜂窝网络是否可用
- 检查主卡和副卡是否为不同运营商
- 查询设备是否支持多网并发功能
- 提示用户检查网络设置

### Q2:多网请求成功,但实际网络速度没有提升

**原因**:
- 传输协议接口不支持指定网络(如HTTP只支持默认网络)
- 应用未使用新发起的网络进行数据传输
- 网络质量问题

**解决方法**:
- 确认使用的传输协议接口是否支持指定网络
- 使用支持指定网络的接口(如Socket)
- 监听多网状态变化,确认多网是否真正建立
- 检查网络质量

### Q3:多网请求成功后,被系统自动释放

**原因**:
- 配额耗尽(MULTIPATH_CHANGE_CAUSE_RELEASE_NO_QUOTA)
- 功耗限制(MULTIPATH_CHANGE_CAUSE_RELEASE_POWER_CONSUMPTION)
- 流量不足(MULTIPATH_CHANGE_CAUSE_RELEASE_INSUFFICIENT_TRAFFIC)
- 用户关闭网络加速开关(MULTIPATH_CHANGE_CAUSE_RELEASE_USER_REFUSED)
- 应用长时间占用多网不释放(MULTIPATH_CHANGE_CAUSE_RELEASE_SYS_FUSING)

**解决方法**:
- 监听`multiPathStateChange`事件,及时感知多网释放
- 根据释放原因提示用户
- 避免长时间占用多网资源,业务结束后及时释放
- 在配额不足时使用单网降级方案

### Q4:如何判断设备是否支持多网并发?

**原因**:不同设备的多网并发能力可能不同

**解决方法**:
- 发起多网请求前,检查网络加速开关是否存在(设置->移动网络->网络加速)
- 发起多网请求,捕获错误码1013620009(不支持并发)
- 通过`getMultiPathQuotaStats`接口查询配额,如果接口可用则设备支持

### Q5:如何处理主卡和副卡并发?

**原因**:主卡和副卡并发需要特定条件

**解决方法**:
- 确保主卡和副卡为不同运营商
- 开启智能切换上网卡开关
- 检查主卡和副卡驻留网络的频点是否满足并发条件
- 捕获错误码1013620007,提示用户当前不满足主副卡并发条件

### Q6:多网请求的配额是如何计算的?

**原因**:配额包括次数和时长,限制应用的多网使用

**解决方法**:
- 使用`getMultiPathQuotaStats`接口查询配额使用情况
- 配额包括已使用次数、已使用时长、剩余次数、剩余时长
- 配额由系统管理,可能按天或其他周期刷新
- 在配额不足时,使用单网降级方案

### Q7:如何在后台使用多网并发?

**原因**:后台应用的多网使用可能受限制

**解决方法**:
- 多网并发主要用于前台应用的网络加速
- 后台应用长时间占用多网可能被系统释放(MULTIPATH_CHANGE_CAUSE_RELEASE_SYS_FUSING)
- 应用切换到后台时,建议主动释放多网资源
- 应用回到前台时,根据业务需要重新发起多网请求

### Q8:如何优化多网并发的使用?

**原因**:不合理的使用可能导致配额浪费或用户体验下降

**解决方法**:
- 在业务流程开始时发起多网,业务结束时释放
- 监听系统多网推荐(`multiPathRecommendation`),按需发起或释放
- 避免频繁发起和释放多网(错误码1013620006)
- 使用支持指定网络的传输协议接口
- 监听多网状态变化,及时处理异常情况
- 在配额不足、功耗限制、流量不足时使用单网降级方案

## 输出结果报告

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

```json
{
  "status": "success",
  "multiPathRequested": true,
  "multiPathState": "MULTIPATH_CREATED",
  "quotaUsed": {
    "count": 1,
    "duration": 120
  },
  "quotaRemaining": {
    "count": 9,
    "duration": 1800
  },
  "apiUsed": [
    "netHandover.requestMultiPath",
    "netHandover.releaseMultiPath",
    "netHandover.on('multiPathStateChange')",
    "netHandover.off('multiPathStateChange')",
    "netHandover.getMultiPathQuotaStats"
  ],
  "warnings": [],
  "errors": []
}
```

## 参考文档

- [API开发指南:多网发起和释放](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/networkboost-netmultipath-request-release)
- [API参考说明:netHandover模块](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/networkboost-nethandover)

## 完整示例代码

- [ArkTS示例代码](assets/multipath_example.ets)
- [权限配置示例](assets/module.json5)
- [依赖配置示例](assets/oh-package.json5)

## 测试用例

### 正向测试用例
- [发起多网请求成功](tests/test_positive.ets):正常发起多网并发请求并成功建立
- [释放多网成功](tests/test_positive.ets):正常释放已建立的多网并发链路
- [监听状态变化](tests/test_positive.ets):订阅多网状态变化并正确处理状态变更
- [查询配额信息](tests/test_positive.ets):成功查询配额使用情况和剩余情况

### 边界测试用例
- [配额即将耗尽](tests/test_boundary.ets):剩余配额为1时发起多网请求
- [多网已激活状态](tests/test_boundary.ets):在多网已激活时重复发起请求
- [网络条件临界](tests/test_boundary.ets):WiFi和蜂窝网络质量临界时发起请求
- [并发时长临界](tests/test_boundary.ets):多网并发时长接近配额限制

### 异常测试用例
- [权限未授予](tests/test_exception.ets):未申请LINKTURBO权限时发起请求
- [配额已耗尽](tests/test_exception.ets):剩余配额为0时发起请求
- [网络不可用](tests/test_exception.ets):WiFi和蜂窝网络均不可用时发起请求
- [设备不支持](tests/test_exception.ets):在不支持多网并发的设备上发起请求
- [功耗限制](tests/test_exception.ets):功耗限制导致无法发起多网请求
- [流量不足](tests/test_exception.ets):流量不足导致无法发起多网请求
- [释放非当前应用多网](tests/test_exception.ets):尝试释放其他应用发起的多网

Files in this skill

  • SUB_SKILL.md27.7 KB
  • assets/module.json51.5 KB
  • assets/multipath_example.ets13.4 KB
  • assets/oh-package.json5327 B

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…