HarmonyOS NEXT开发 --- 1、ArkTS验证网络连接情况 原创

彬彬不吃冰
发布于 2025-2-13 13:24
1.8w浏览
0收藏

目录

1.前言

   在HarmonyOS 开发中,网络权限属于system_grant(系统授权)权限,可参照官方文档:system_grant系统授权权限列表,因此开发者在使用system_grant系统权限的时候不需要向用户二次申请,而只需要向系统声明即可正常使用相关权限。
   同时,在用户使用APP时也不知道网络是否正常,那么就需要开发者在设计APP过程中添加相关功能来提升用户体验。
  比如,用户所连接的网络不可用时,及时提醒用户,以免用户误以为是APP功能原因。

   附:受限开发权限列表中的权限,通常不能够声明后直接使用,则可以弹窗形式向用户二次申请。

2.导入权限依赖

在“···src–> main”目录下的“moudule.json5”文件中添加以下内容

...
"requestPermissions": [
      {
        "name": "ohos.permission.INTERNET",
        "usedScene": {
          "when": "always"
        }
      },
      {
        "name": "ohos.permission.GET_NETWORK_INFO",
        "usedScene": {
          "when": "always"
        }
      }
    ]
...
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.

3.主要代码

 NetWorkState():boolean{
  try { // 获取当前网络连接
    let netHandle = connection.getDefaultNetSync();

    // 0-100 为系统预留的连接
    if (!netHandle || netHandle.netId < 100) {
      return false;
    }

    // 获取连接的属性
    let netCapability = connection.getNetCapabilitiesSync(netHandle);
    let cap = netCapability.networkCap;
    if (!cap) {
      return false;
    }

    for (let em of cap) {
      if (connection.NetCap.NET_CAPABILITY_VALIDATED === em) {
        return true;
      }
    }
  } catch (e) {
    let err = e as BusinessError;
    console.info('get netInfo error :' + JSON.stringify(err));
  }
  return false;
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.

4.完整代码

  基于主要功能代码,在开发过程中,开发者也可以将判断网络状态的方法封装起来放在公共模块中,供其他各个模块使用。

export class NetWorkStates{

  //根据判断结果显示提示窗
  CheckNetWorkState(){
    if(this.NetWorkState()){
      this.GetNetWorkStateTalk()
    }else{
      this.NoNetWorkStateTalk()
    }
  }

  //判断网络连接
  NetWorkState():boolean{
    try {
      // 获取当前网络连接
      let netHandle = connection.getDefaultNetSync();

      // 0-100 为系统预留的连接
      if (!netHandle || netHandle.netId < 100) {
        return false;
      }

      // 获取连接的属性
      let netCapability = connection.getNetCapabilitiesSync(netHandle);
      let cap = netCapability.networkCap;
      if (!cap) {
        return false;
      }
      for (let em of cap) {
        if (connection.NetCap.NET_CAPABILITY_VALIDATED === em) {
          return true;
        }
      }

    } catch (e) {
      let err = e as BusinessError;
      console.info('get netInfo error :' + JSON.stringify(err));
    }
    return false;
  }

  GetNetWorkStateTalk(){
    promptAction.showToast({
      message: '网络连接正常',
      duration: 1000,
      bottom: 50
    })
  }

  NoNetWorkStateTalk(){
    promptAction.showToast({
      message: '无法连接服务器,请检查网络连接',
      duration: 1000,
      bottom: 50
    })
  }

}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
  • 51.
  • 52.
  • 53.
  • 54.
  • 55.
  • 56.
  • 57.
  • 58.

©著作权归作者所有,如需转载,请注明出处,否则将追究法律责任
收藏
回复
举报


回复
    相关推荐