HarmonyOS 鸿蒙Next 监听设备网络状态案例

HarmonyOS 鸿蒙Next 监听设备网络状态案例

介绍

1.监听当前网络连接状态

2.监听网络类型(wifi、蜂窝网络)

3.判断蜂窝网络类型(3G\4G\5G)和信号强度

demo详情链接

https://gitee.com/scenario-samples/net-status-listen

2 回复

在HarmonyOS(鸿蒙)系统中,监听设备网络状态可以通过系统提供的API来实现,通常这些API会封装在特定的系统库中,供开发者调用。以下是一个简化的场景化代码示例,用于监听设备的网络状态变化:

#include <OhosConfig.h>
#include <network/NetworkStatusCallback.h>
#include <network/INetworkService.h>

class MyNetworkStatusCallback : public OHOS::Network::NetworkStatusCallback {
public:
    void OnNetworkStatusChanged(OHOS::Network::NetworkType type, OHOS::Network::NetworkState state) override {
        // 根据网络类型(type)和网络状态(state)执行相应操作
    }
};

void startNetworkMonitoring() {
    auto networkService = OHOS::Network::INetworkService::Get();
    if (networkService != nullptr) {
        MyNetworkStatusCallback callback;
        networkService->RegisterNetworkStatusCallback(callback);
    }
}

int main() {
    startNetworkMonitoring();
    // 主程序逻辑
}

上述代码通过实现NetworkStatusCallback接口,并重写OnNetworkStatusChanged方法,来监听网络状态的变化。RegisterNetworkStatusCallback方法用于注册回调函数,以便在网络状态发生变化时接收通知。

请注意,这只是一个简化的示例,实际应用中可能需要处理更多的错误检查和资源管理。

更多关于HarmonyOS 鸿蒙Next 监听设备网络状态案例的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


import { connection } from '@kit.NetworkKit';
import { BusinessError } from '@kit.BasicServicesKit';

@Component
struct SimpleNetworkStatus {
  // 创建网络连接对象
  private netCon: connection.NetConnection = connection.createNetConnection();

  aboutToAppear(): void {
    this.setupNetworkListeners();
  }

  setupNetworkListeners() {
    // 注册网络状态监听
    this.netCon.register((error: BusinessError) => {
      if (error) {
        console.error('网络状态监听注册失败:', JSON.stringify(error));
      } else {
        console.log('网络状态监听注册成功');
      }
    });

    // 监听网络可用事件
    this.netCon.on('netAvailable', (data: connection.NetHandle) => {
      console.log('网络已连接');
      this.checkNetworkType(data);
    });

    // 监听网络断开事件
    this.netCon.on('netLost', () => {
      console.log('网络已断开 - 无互联网连接');
    });

    // 监听网络不可用事件
    this.netCon.on('netUnavailable', () => {
      console.log('网络不可用');
    });
  }

  // 检查当前网络类型
  checkNetworkType(netHandle: connection.NetHandle) {
    connection.getNetCapabilities(netHandle, (error: BusinessError, data: connection.NetCapabilities) => {
      if (error) {
        console.error('获取网络能力失败:', JSON.stringify(error));
        return;
      }

      if (data && data.bearerTypes) {
        const networkType = this.getNetworkTypeName(data.bearerTypes[0]);
        console.log('当前网络类型:', networkType);
      }
    });
  }

  // 获取网络类型名称
  getNetworkTypeName(type: number): string {
    switch(type) {
      case 0: return '蜂窝网络';
      case 1: return 'Wi-Fi';
      case 2: return '以太网';
      default: return '未知网络';
    }
  }

  build() {
    Column() {
      Text('网络状态监控')
        .fontSize(20)
        .margin(10);
      Text('请在控制台查看网络状态更新')
        .fontSize(16)
        .margin(10);
    }
    .width('100%')
    .height('100%')
    .justifyContent(FlexAlign.Center)
    .alignItems(HorizontalAlign.Center)
  }
}

回到顶部