插件
我使用的是wifi_iot这个插件,版本是0.2.2,flutter版本是1.20.0。
dependencies:
flutter:
sdk: flutter
wifi_iot: ^0.2.2
获取wifi名称
插件地址:https://pub.flutter-io.cn/packages/wifi_iot main.dart 代码
import 'package:flutter/material.dart';
import 'package:wifi_iot/wifi_iot.dart';
void main() => runApp(FlutterWifiIoT());
class FlutterWifiIoT extends StatefulWidget {
const FlutterWifiIoT({Key key}) : super(key: key);
@override
_FlutterWifiIoTState createState() => _FlutterWifiIoTState();
}
class _FlutterWifiIoTState extends State<FlutterWifiIoT> {
String wifiName = '--';
@override
void initState() {
super.initState();
getWifiName();
}
getWifiName() async {
String wifissid = await WiFiForIoTPlugin.getSSID();
print('wifissid:' + wifissid);
this.setState(() {
wifiName = wifissid;
});
}
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('demo'),
elevation: 20.0,
centerTitle: true,
),
body: Container(
child: Column(
children: <Widget>[
Text(wifiName),
FlatButton(
onPressed: getWifiName,
child: Text('获取'),
)
],
),
),
),
);
}
}
获取不到wifi名称
我遇到的情况是该插件在安卓7.0的设备上可以获取wifi名称,但是在安卓10上获取不到wifi名称。
主要是安卓10获取WiFi名称需要定位权限。
1,在项目目录:android\app\src\main\AndroidManifest.xml里添加以下权限。添加完成并不代表已授权,需要提示用户进行授。
<!--使用网络-->
<uses-permission android:name="android.permission.INTERNET" />
<!--网络状态-->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<!--wifi状态权限-->
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<!--位置信息-->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<!--如果是安卓10.0,需要后台获取连接的wifi名称则添加进程获取位置信息权限 -->
<uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />
<!--android 10.0使用wifi api新添加的权限-->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
2,添加完成后还需要提示获取定位权限,用户授权后才能获取到WiFi名称,所以需要让用户授权。这里我是用的是permission_handler: ^3.0.1插件。
import 'package:flutter/material.dart';
import 'package:wifi_iot/wifi_iot.dart';
import 'package:permission_handler/permission_handler.dart';
void main() => runApp(FlutterWifiIoT());
class FlutterWifiIoT extends StatefulWidget {
const FlutterWifiIoT({Key key}) : super(key: key);
@override
_FlutterWifiIoTState createState() => _FlutterWifiIoTState();
}
class _FlutterWifiIoTState extends State<FlutterWifiIoT> {
String wifiName = '--';
@override
void initState() {
super.initState();
// 权限
var permission =
PermissionHandler().checkPermissionStatus(PermissionGroup.location);
print("permission status is " + permission.toString());
// 请求授权,location是定位权限。
PermissionHandler()
.requestPermissions(<PermissionGroup>[PermissionGroup.location]);
getWifiName();
}
getWifiName() async {
String wifissid = await WiFiForIoTPlugin.getSSID();
print('wifissid:' + wifissid);
this.setState(() {
wifiName = wifissid;
});
}
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('demo'),
elevation: 20.0,
centerTitle: true,
),
body: Container(
child: Column(
children: <Widget>[
Text(wifiName),
FlatButton(
onPressed: getWifiName,
child: Text('获取'),
)
],
),
),
),
);
}
}
|