如果是Wi-Fi,则直接确认网络类型是Wi-Fi。如果是在蜂窝连接情况下,可以调用radio.getSignalInformation获取指定SIM卡槽对应的注册网络信号强度信息列表,返回SignalInformation对象的数组,其中,返回的signalType代表网络类型NetworkType,signalType的值对应网络类型如下:GSM(2G)、CDMA(2G)、WCDMA(3G)、TDSCDMA(3G)、LTE(4G)、 NR(5G)。
参考示例如下:
import { connection } from '@kit.NetworkKit'; import { BusinessError } from '@kit.BasicServicesKit'; import { radio } from '@kit.TelephonyKit'; @Entry @Component struct Index { build() { Column() { Button('获取网络类型') .onClick(() => { connection.getDefaultNet().then((netHandle: connection.NetHandle) => { if (netHandle.netId === 0) { return; } connection.getNetCapabilities(netHandle, (error: BusinessError, data: connection.NetCapabilities) => { if (error) { console.error(`Failed to get net capabilities. Code:${error.code}, message:${error.message}`); return; } console.info(`Succeeded to get data: data->${JSON.stringify(data)}`); if (data.bearerTypes[0] === 1) { } else if (data.bearerTypes[0] === 0) { let slotId: number = 0; radio.getSignalInformation(slotId, (err: BusinessError, data: Array<radio.SignalInformation>) => { if (err) { console.error(`getSignalInformation failed, callback: err->${JSON.stringify(err)}`); return; } console.info(`getSignalInformation success, callback: data->${JSON.stringify(data)}`); }); } }); }).catch((error: BusinessError) => { console.error(`error: ${JSON.stringify(error)}`); }); }); } .width('100%') .height('100%') .justifyContent(FlexAlign.SpaceAround); } }
Q:在连接到蜂窝网络的时候,获取到的NetCapabilities中linkUpBandwidthKbps和linkDownBandwidthKbps是有值的,但是在连接Wi-Fi或者其他个人热点的时候,上述的linkUpBandwidthKbps、linkDownBandwidthKbps、ConnectionProperties都是0。
A:连接Wi-Fi或者其他个人热点的时候linkUpBandwidthKbps,linkDownBandwidthKbps,ConnectionProperties返回0是正常的,表示无法评估当前网络。
Q:如何判断当前是否有网络?
A:connection.hasDefaultNetSync可判断默认网络是否被激活,true表示被激活,false表示没有被激活。
Q:如何获取当前连接的Wi-Fi网速?
A:wifiManager.getLinkedInfo可以获取Wi-Fi连接的相关信息,包含上行速度、下行速度。
Q:如何在手机端通过软件设置手机本身的丢包?
A:网络领航员可以进行网络模拟,通过自定义上下行丢包率、上下行延迟等模拟弱网环境。