React Native在Android 13无法获取WiFi信息,Android 12正常求助
Android 13下React Native无法获取WiFi SSID/BSSID的解决方案
问题原因
Android 13(API 33)对WiFi信息获取的权限机制做了调整:
- 原有的
ACCESS_FINE_LOCATION权限不再单独满足WiFi SSID/BSSID的获取需求 - 新增
NEARBY_WIFI_DEVICES权限,用于访问附近WiFi设备信息,需通过权限标志明确是否关联定位用途
解决方案
1. 更新AndroidManifest.xml权限配置
在android/app/src/main/AndroidManifest.xml中添加权限配置:
<!-- Android 13+ 访问WiFi设备信息所需权限,neverForLocation表示不关联定位 --> <uses-permission android:name="android.permission.NEARBY_WIFI_DEVICES" android:usesPermissionFlags="neverForLocation" /> <!-- 兼容Android 12及以下版本的权限 --> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
2. 升级依赖库到适配版本
确保WiFi相关依赖库已适配Android 13权限规则:
react-native-network-info升级至v6.0.0及以上@react-native-community/netinfo升级至v9.3.0及以上
3. 动态权限申请(可选)
如果需要在运行时确认权限,可添加以下逻辑:
import { PermissionsAndroid, Platform } from 'react-native'; import { NetworkInfo } from 'react-native-network-info'; async function requestWifiPermissions() { if (Platform.Version >= 33) { const granted = await PermissionsAndroid.request( PermissionsAndroid.PERMISSIONS.NEARBY_WIFI_DEVICES, { title: "WiFi权限申请", message: "应用需要访问WiFi信息以正常运行", buttonNegative: "取消", buttonPositive: "允许" } ); return granted === PermissionsAndroid.RESULTS.GRANTED; } else { const granted = await PermissionsAndroid.request( PermissionsAndroid.PERMISSIONS.ACCESS_FINE_LOCATION, { title: "定位权限申请", message: "应用需要定位权限以获取WiFi信息", buttonNegative: "取消", buttonPositive: "允许" } ); return granted === PermissionsAndroid.RESULTS.GRANTED; } } // 在获取WiFi信息前调用权限申请 requestWifiPermissions().then(granted => { if (granted) { NetworkInfo.getSSID().then(ssid => { setWifiSSID(ssid || ''); console.log(ssid); }); } });
4. 验证效果
重新编译运行应用后,Android 13设备上:
- SSID将返回真实名称,不再显示
<unknown ssid> - BSSID将显示真实MAC地址,而非
02:00:00:00:00:00
内容的提问来源于stack exchange,提问作者Zuet
相关产品推荐
相关产品推荐

