HarmonyOS 网络变化监听失效

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

export class SNMDemo {
  constructor() {
    this.init();
  }

  init() {
    console.info('init start');
    let netSpecifier: connection.NetSpecifier = {
      netCapabilities: {
        bearerTypes: [connection.NetBearType.BEARER_CELLULAR, connection.NetBearType.BEARER_WIFI,
          connection.NetBearType.BEARER_ETHERNET],
        // 指定网络能力为Internet
        networkCap: [connection.NetCap.NET_CAPABILITY_INTERNET]
      },
    };

    // 指定超时时间为10s(默认值为0)
    let timeout = 10 * 1000;

    // 创建NetConnection对象
    let conn = connection.createNetConnection(netSpecifier, timeout);

    // 订阅指定网络状态变化的通知
    conn.register((err: BusinessError, data: void) => {
      if (err) {
        console.error(`监听网络状态失败 ${JSON.stringify(err)}`)
      }
    });

    // 订阅事件,如果当前指定网络可用,通过on_netAvailable通知用户
    conn.on('netAvailable', ((data: connection.NetHandle) => {
      console.info(`netAvailable ${data.netId}`);
      connection.getNetCapabilities(data, (error, data) => {
        if (error) {
          console.error(`Failed to get net capabilities. Code:${error.code}, message:${error.message}`)
          return;
        }
        const netType = [...data.bearerTypes].sort().join(',');
        console.info(`netAvailable type change ${netType}`);
      })
    }));

    // 订阅事件,如果当前指定网络不可用,通过on_netUnavailable通知用户
    conn.on('netUnavailable', ((data: void) => {
      console.info(`netUnavailable`);
    }));
    console.info(`init end`);
  }
}
  • 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.

之后在页面中创建

@Entry
@Component
struct Index {
  private demo = new SNMDemo();
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.

目前只有刚创建的netAvailable回调,之后关闭打开wifi、移动网络没有任何回调触发。

HarmonyOS
2024-12-23 15:47:47
浏览
收藏 0
回答 1
回答 1
按赞同
/
按时间
FengTianYa

请参考示例如下修改,关闭网络监听用netLost:

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

let netSpecifier: connection.NetSpecifier = {
  netCapabilities: {
    bearerTypes: [connection.NetBearType.BEARER_CELLULAR, connection.NetBearType.BEARER_WIFI,
      connection.NetBearType.BEARER_ETHERNET],
    // 指定网络能力为Internet
    networkCap: [connection.NetCap.NET_CAPABILITY_INTERNET]
  },
};
// 指定超时时间为10s(默认值为0)
let timeout = 10 * 1000;
// 创建NetConnection对象
let conn = connection.createNetConnection(netSpecifier, timeout);

// netCon: connection.NetConnection = connection.createNetConnection();
export class SNMDemo {
  init() {
    console.info('init start');
    // let netSpecifier: connection.NetSpecifier = {
    // netCapabilities: {
    // bearerTypes: [connection.NetBearType.BEARER_CELLULAR, connection.NetBearType.BEARER_WIFI,
    // connection.NetBearType.BEARER_ETHERNET],
    // // 指定网络能力为Internet
    // networkCap: [connection.NetCap.NET_CAPABILITY_INTERNET]
    // },
    // };
    // // 指定超时时间为10s(默认值为0)
    // let timeout = 10 * 1000;
    // // 创建NetConnection对象
    // let conn = connection.createNetConnection(netSpecifier, timeout);

    // 订阅指定网络状态变化的通知
    conn.register((err: BusinessError, data: void) => {
      if (err) {
        console.error(`监听网络状态失败 ${JSON.stringify(err)}`)
      }
    });
    // 订阅事件,如果当前指定网络可用,通过on_netAvailable通知用户
    conn.on('netAvailable', ((data: connection.NetHandle) => {
      console.info(`netAvailable ${data.netId}`);
      connection.getNetCapabilities(data, (error, data) => {
        if (error) {
          console.error(`Failed to get net capabilities. Code:${error.code}, message:${error.message}`)
          return;
        }
        const netType = [...data.bearerTypes].sort().join(',');
        console.info(`netAvailable type change ${netType}`);
      })
    }));
    // 订阅事件,如果当前指定网络不可用,通过on_netUnavailable通知用户
    conn.on('netUnavailable', ((data: void) => {
      console.info(`netUnavailable`);
    }));
    // 订阅网络可用事件。调用register后,才能接收到此事件通知
    conn.on('netLost', (data: connection.NetHandle) => {
      console.log("lose----", JSON.stringify(data));
    });
    console.info(`init end`);
  }
}

export const defaultInstance = new SNMDemo();
  • 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.
  • 59.
  • 60.
  • 61.
  • 62.
  • 63.
  • 64.
分享
微博
QQ
微信
回复
2024-12-23 20:22:51
相关问题
HarmonyOS keyboardHeightChange键盘监听失效
890浏览 • 1回复 待解决
如何实现一个监听网络变化的方法
1343浏览 • 1回复 待解决
HarmonyOS onMemoryLevel监听内存变化
580浏览 • 1回复 待解决
HarmonyOS升级版本后音量监听失效
1316浏览 • 0回复 待解决
HarmonyOS 监听网络错误
556浏览 • 1回复 待解决
HarmonyOS 音频设备变化监听
915浏览 • 1回复 待解决
HarmonyOS 进行二级请求后变量监听失效
1014浏览 • 1回复 待解决
HarmonyOS网络监听问题
886浏览 • 1回复 待解决
HarmonyOS 如何监听系统主题变化
874浏览 • 1回复 待解决
HarmonyOS page如何监听数据变化
823浏览 • 1回复 待解决
HarmonyOS 装饰器数据变化监听
573浏览 • 1回复 待解决
鸿蒙如何监听键盘高度变化
322浏览 • 1回复 待解决
HarmonyOS 如何监听折叠屏折叠状态变化
1009浏览 • 1回复 待解决
HarmonyOS 网络监听回调多次
840浏览 • 1回复 待解决
HarmonyOS 网络连接监听问题
996浏览 • 1回复 待解决
HarmonyOS 网络监听api怎么用
711浏览 • 1回复 待解决
HarmonyOS 如何监听某个变量是否变化
725浏览 • 1回复 待解决
HarmonyOS 如何监听组件自身尺寸变化
758浏览 • 1回复 待解决