蜂窝数据和wifi通道切换

蜂窝数据和wifi通道切换


import { BusinessError } from '@kit.BasicServicesKit';
import { connection } from '@kit.NetworkKit';
import { data } from '@kit.TelephonyKit';
import { ToastUtil } from '@pura/harmony-utils';export class WifiConnectManager {private static instance?: WifiConnectManager;private isWifi: boolean = true;/*** Get singleton** @returns Singleton object*/public static getInstance(): WifiConnectManager {if (!WifiConnectManager.instance) {WifiConnectManager.instance = new WifiConnectManager();}return WifiConnectManager.instance;}/*** @description :移动数据是否开启*/public async isMobileDataEnabled(): Promise<boolean> {return await data.isCellularDataEnabled();}/*** @param: isWifi: true: wifi, false: 流量*/public startListenNetChange(isWifi: boolean): void {console.info('registerNetListener');console.info('registerNetListener', `connect  type : + ${isWifi ? 'wifi' : '流量'}`);WifiConnectManager.getInstance().isWifi = isWifi;let netConnectionWifi = connection.createNetConnection({netCapabilities: {bearerTypes: [connection.NetBearType.BEARER_WIFI]}});netConnectionWifi.register((error: BusinessError) => {if (error) {console.error(`register error: ${error.code}`);}});netConnectionWifi.on('netAvailable', () => {console.info('netConnectionWifi netAvailable');if (WifiConnectManager.getInstance().isWifi) {this.bindWifiWhenConnected();} else {this.bindCellularWhenConnected();}});netConnectionWifi.on('netLost', () => {console.info('Wifi netLost');if (WifiConnectManager.getInstance().isWifi) {this.bindWifiWhenConnected();} else {this.bindCellularWhenConnected();}});let netConnectionCellular = connection.createNetConnection({netCapabilities: {bearerTypes: [connection.NetBearType.BEARER_CELLULAR]}});netConnectionCellular.register((error: BusinessError) => {if (error) {console.error(`register error: ${error.message}`);}});netConnectionCellular.on('netAvailable', () => {console.info('netConnectionCellular netAvailable');if (WifiConnectManager.getInstance().isWifi) {this.bindWifiWhenConnected();} else {this.bindCellularWhenConnected();}});netConnectionCellular.on('netLost', () => {console.info('Cellular netLost');if (WifiConnectManager.getInstance().isWifi) {this.bindWifiWhenConnected();} else {this.bindCellularWhenConnected();}});}/*** @Description: 绑定WiFi*/private async bindWifiWhenConnected(): Promise<void> {await connection.setAppNet(connection.getDefaultNetSync()).then(() => {console.info('setAppNet default success');});connection.getAllNets().then((data: connection.NetHandle[]) => {data.forEach(net => {connection.getNetCapabilities(net).then((data: connection.NetCapabilities) => {if (data.bearerTypes.length > 0 && data.bearerTypes[0] === connection.NetBearType.BEARER_WIFI) {connection.setAppNet(net).then(() => {console.info('setAppNet wifi success');return;}).catch((error: Error) => {console.error(`setAppNet wifi failed, error = ${error.message}`);});}}).catch((error: Error) => {console.error(`getNetCapabilities error = ${error.message}`);});});}).catch((error: Error) => {console.error(`getAllNets error = ${error.message}`);});}/*** @Description: 绑定移动数据*/private async bindCellularWhenConnected(): Promise<void> {// 先判断移动数据是否开启const isMobileDataEnabled = await this.isMobileDataEnabled()if (!isMobileDataEnabled) {ToastUtil.showToast($r('app.string.Telephony_error'));return}await connection.setAppNet(connection.getDefaultNetSync()).then(() => {console.info('setAppNet default success');});connection.getAllNets().then((data: connection.NetHandle[]) => {data.forEach(net => {connection.getNetCapabilities(net).then((data: connection.NetCapabilities) => {if (data.bearerTypes.length > 0 && data.bearerTypes[0] === connection.NetBearType.BEARER_CELLULAR) {connection.setAppNet(net).then(() => {console.info('setAppNet cellular success');return;}).catch((error: Error) => {console.error(`setAppNet cellular failed, error = ${error.message}`);});}}).catch((error: Error) => {console.error(`getNetCapabilities error = ${error.message}`);});});}).catch((error: Error) => {console.error(`getAllNets error = ${error.message}`);});}
}