React Native(Expo Go)获取WiFi与移动网络dBm信号强度问题
React Native 获取WiFi及移动网络dBm信号强度解决方案
1. 获取dBm格式的WiFi信号强度
@react-native-community/netinfo 返回的strength是0-100的百分比值,并非dBm格式的信号强度(dBm通常为负数,范围-100到0,数值越接近0信号越强)。要获取dBm,可使用专门的WiFi信息库react-native-wifi-reborn(支持安卓、iOS):
安装依赖
npm install react-native-wifi-reborn # 或 yarn add react-native-wifi-reborn
使用示例
import React, { useState, useEffect } from 'react'; import { Text, View } from 'react-native'; import WifiManager from 'react-native-wifi-reborn'; const App = () => { const [wifiDbm, setWifiDbm] = useState(null); useEffect(() => { const interval = setInterval(async () => { try { // 获取当前WiFi的dBm信号强度 const signalStrength = await WifiManager.getCurrentWifiSignalStrength(); setWifiDbm(signalStrength); } catch (error) { console.error('获取WiFi信息失败:', error); } }, 10000); return () => clearInterval(interval); }, []); return ( <View> <Text>WiFi信号强度(dBm): {wifiDbm}</Text> </View> ); }; export default App;
权限配置:
- 安卓:在
AndroidManifest.xml添加<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
- iOS:在
Info.plist添加<key>NSLocationWhenInUseUsageDescription</key> <string>需要位置权限获取WiFi信息</string>
2. 获取移动网络的信号强度及信息
NetInfo无法获取移动网络的信号细节,需使用蜂窝网络信息库react-native-cell-info:
安装依赖
npm install react-native-cell-info # 或 yarn add react-native-cell-info
使用示例
import React, { useState, useEffect } from 'react'; import { Text, View } from 'react-native'; import CellInfo from 'react-native-cell-info'; const App = () => { const [mobileDbm, setMobileDbm] = useState(null); useEffect(() => { const interval = setInterval(async () => { try { const cellData = await CellInfo.getCellInfo(); if (cellData.length > 0) { // 取首个蜂窝网络的dBm值 setMobileDbm(cellData[0].dbm); } } catch (error) { console.error('获取移动网络信息失败:', error); } }, 10000); return () => clearInterval(interval); }, []); return ( <View> <Text>移动网络信号强度(dBm): {mobileDbm}</Text> </View> ); }; export default App;
权限配置:
- 安卓:在
AndroidManifest.xml添加<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <uses-permission android:name="android.permission.READ_PHONE_STATE" />
- iOS:在
Info.plist添加<key>NSLocationWhenInUseUsageDescription</key> <string>需要位置权限获取蜂窝网络信息</string>
原生实现补充(无需第三方库)
- 安卓:通过
TelephonyManager获取SignalStrength,调用getDbm()直接获取dBm值。 - iOS:通过
CoreTelephony框架的CTTelephonyNetworkInfo获取信号强度数值(0-31),转换为dBm的公式为:dBm = -120 + signalStrength。
内容的提问来源于stack exchange,提问作者Laurent
相关产品推荐
相关产品推荐

