使用第三方插件
- connectivity_plus 用来监听切换网络的变化
- network_info_plus 用来获取 wifi 的名称
值得注意的是 根据文档中配置 network_info_plus 获取wifi的名称返回的是 null, 原因是需要获取安卓的权限,还需要通过获取应用的定位信息
第一步配置安卓权限
在 android/app/src/main/AndroidMainifest.xml 中配置
<!-- 获取WIFI信息 -->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
在 android/app/build.gradle 文件中添加
defaultConfig {
...
ndk {
abiFilters 'armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64'
}
}
使用 在组件中的 onInit 周期中使用
@override
void onInit()async{
super.onInit();
// 监听网络变化
await checkLocationPermission();
final connectivity = Connectivity();
connectivity.onConnectivityChanged.listen((event) async {
if (event == ConnectivityResult.wifi) {
await checkLocationPermission();
}
});
}
/*授权获取位置权限用于获取无线名称 */
checkLocationPermission()async{
LocationPermission permission = await Geolocator.checkPermission();
if (permission == LocationPermission.denied) {
permission = await Geolocator.requestPermission();
if (permission == LocationPermission.denied) {
print('位置授权被拒了');
}
}
if (permission == LocationPermission.deniedForever) {
print("位置授权被永久拒了");
}
// 授权通过
getCurrentWifiName();
}
/**获取当前无线名称 */
getCurrentWifiName() async {
final info = NetworkInfo();
final getWifiName = await info.getWifiName();
var formatWifiName = getWifiName?.replaceAll('"','');
wifiName.value = formatWifiName??'请检查网络连接';
update();
}