Skip to content

Commit 5c0b53b

Browse files
authored
feat:适配cellular下的NetInfoState (#10)
1 parent f75ce0e commit 5c0b53b

File tree

1 file changed

+41
-7
lines changed

1 file changed

+41
-7
lines changed

harmony/netinfo/src/main/ets/NetInfoTurboModule.ts

Lines changed: 41 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ import { TurboModule } from '@rnoh/react-native-openharmony/ts';
2626
import type { TurboModuleContext } from '@rnoh/react-native-openharmony/ts';
2727
import wifiManager from '@ohos.wifiManager';
2828
import connection from '@ohos.net.connection'
29+
import { radio } from '@kit.TelephonyKit';
2930
import Logger from './Logger'
3031

3132
class NetInfoState {
@@ -47,6 +48,8 @@ class Details {
4748
linkSpeed?: number
4849
rxLinkSpeed?: number
4950
txLinkSpeed?: number
51+
carrier?: string;
52+
cellularGeneration?:string | null;
5053
}
5154

5255
export class NetInfoTurboModule extends TurboModule {
@@ -127,9 +130,9 @@ export class NetInfoTurboModule extends TurboModule {
127130
listenerGetCurrentState(): void {
128131
if (this.numberOfListeners > 0) {
129132
this.createConnectionEvent()
130-
.then(data => {
131-
this.ctx.rnInstance.emitDeviceEvent('netInfo.networkStatusDidChange', data)
132-
})
133+
.then(data => {
134+
this.ctx.rnInstance.emitDeviceEvent('netInfo.networkStatusDidChange', data)
135+
})
133136
}
134137
}
135138

@@ -162,6 +165,9 @@ export class NetInfoTurboModule extends TurboModule {
162165
case 3:
163166
event.type = 'ethernet'
164167
break
168+
case 4:
169+
event.type = 'vpn';
170+
break
165171
default:
166172
event.type = 'unknown'
167173
break
@@ -176,10 +182,40 @@ export class NetInfoTurboModule extends TurboModule {
176182
return event;
177183
}
178184

185+
getNetworkType(cellularInfo: radio.SignalInformation){
186+
let networkType: string | null = null;
187+
switch (cellularInfo.signalType) {
188+
case 0:
189+
networkType = null;
190+
break;
191+
case 1:
192+
case 2:
193+
networkType = '2g';
194+
break;
195+
case 3:
196+
case 4:
197+
networkType = '3g';
198+
break;
199+
case 5:
200+
networkType = '4g';
201+
break;
202+
case 6:
203+
networkType = '5g';
204+
break;
205+
}
206+
return networkType;
207+
}
208+
179209
async createDetails(detailsInterface: string): Promise<Details> {
180210
const details: Details = {}
181211
switch (detailsInterface) {
182212
case 'cellular':
213+
const slotId = await radio.getPrimarySlotId();
214+
const cellularInfo = radio.getSignalInformationSync(slotId);
215+
const networkType = this.getNetworkType(cellularInfo[0]);
216+
details.cellularGeneration = networkType;
217+
const networkState = await radio.getNetworkState();
218+
details.carrier = networkState.longOperatorName;
183219
break
184220
case 'wifi':
185221
//wifi信息
@@ -200,12 +236,10 @@ export class NetInfoTurboModule extends TurboModule {
200236
//linkSpeed
201237
details.linkSpeed = linkedInfo.linkSpeed
202238
//rxLinkSpeed
203-
details.rxLinkSpeed = linkedInfo.linkSpeed
239+
details.rxLinkSpeed = linkedInfo.rxLinkSpeed;
204240
//txLinkSpeed
205241
details.txLinkSpeed = linkedInfo.linkSpeed
206242
break
207-
case 'ethernet':
208-
break
209243
}
210244
//isConnectionExpensive
211245
details.isConnectionExpensive = await connection.isDefaultNetMetered()
@@ -215,4 +249,4 @@ export class NetInfoTurboModule extends TurboModule {
215249
ipToString(ipI: number): string {
216250
return ((ipI >> 24) & 0xFF) + '.' + ((ipI >> 16) & 0xFF) + '.' + ((ipI >> 8) & 0xFF) + '.' + (ipI >> 0 & 0xFF)
217251
}
218-
}
252+
}

0 commit comments

Comments
 (0)