@@ -26,6 +26,7 @@ import { TurboModule } from '@rnoh/react-native-openharmony/ts';
26
26
import type { TurboModuleContext } from '@rnoh/react-native-openharmony/ts' ;
27
27
import wifiManager from '@ohos.wifiManager' ;
28
28
import connection from '@ohos.net.connection'
29
+ import { radio } from '@kit.TelephonyKit' ;
29
30
import Logger from './Logger'
30
31
31
32
class NetInfoState {
@@ -47,6 +48,8 @@ class Details {
47
48
linkSpeed ?: number
48
49
rxLinkSpeed ?: number
49
50
txLinkSpeed ?: number
51
+ carrier ?: string ;
52
+ cellularGeneration ?:string | null ;
50
53
}
51
54
52
55
export class NetInfoTurboModule extends TurboModule {
@@ -127,9 +130,9 @@ export class NetInfoTurboModule extends TurboModule {
127
130
listenerGetCurrentState ( ) : void {
128
131
if ( this . numberOfListeners > 0 ) {
129
132
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
+ } )
133
136
}
134
137
}
135
138
@@ -162,6 +165,9 @@ export class NetInfoTurboModule extends TurboModule {
162
165
case 3 :
163
166
event . type = 'ethernet'
164
167
break
168
+ case 4 :
169
+ event . type = 'vpn' ;
170
+ break
165
171
default :
166
172
event . type = 'unknown'
167
173
break
@@ -176,10 +182,40 @@ export class NetInfoTurboModule extends TurboModule {
176
182
return event ;
177
183
}
178
184
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
+
179
209
async createDetails ( detailsInterface : string ) : Promise < Details > {
180
210
const details : Details = { }
181
211
switch ( detailsInterface ) {
182
212
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 ;
183
219
break
184
220
case 'wifi' :
185
221
//wifi信息
@@ -200,12 +236,10 @@ export class NetInfoTurboModule extends TurboModule {
200
236
//linkSpeed
201
237
details . linkSpeed = linkedInfo . linkSpeed
202
238
//rxLinkSpeed
203
- details . rxLinkSpeed = linkedInfo . linkSpeed
239
+ details . rxLinkSpeed = linkedInfo . rxLinkSpeed ;
204
240
//txLinkSpeed
205
241
details . txLinkSpeed = linkedInfo . linkSpeed
206
242
break
207
- case 'ethernet' :
208
- break
209
243
}
210
244
//isConnectionExpensive
211
245
details . isConnectionExpensive = await connection . isDefaultNetMetered ( )
@@ -215,4 +249,4 @@ export class NetInfoTurboModule extends TurboModule {
215
249
ipToString ( ipI : number ) : string {
216
250
return ( ( ipI >> 24 ) & 0xFF ) + '.' + ( ( ipI >> 16 ) & 0xFF ) + '.' + ( ( ipI >> 8 ) & 0xFF ) + '.' + ( ipI >> 0 & 0xFF )
217
251
}
218
- }
252
+ }
0 commit comments