代码。
import 'package:flutter/material.dart';
import 'package:geolocator/geolocator.dart';
class LoadingScreen extends StatefulWidget {
@override
State<StatefulWidget> createState() {
return _LoadingScreenState();
}
}
class _LoadingScreenState extends State<LoadingScreen> {
@override
void initState() {
super.initState();
getLocation();
}
void getLocation() async {
try {
Position position = await Geolocator.getCurrentPosition(
desiredAccuracy: LocationAccuracy.low);
print(position);
} catch (e) {
print(e);
}
}
@override
Widget build(BuildContext context) {
return Scaffold();
}
}
输出:
Launching libmain.dart on AOSP on IA Emulator in debug mode...
Running Gradle task 'assembleDebug'...
✓ Built buildappoutputsflutter-apkapp-debug.apk.
Installing buildappoutputsflutter-apkapp.apk...
Waiting for AOSP on IA Emulator to report its views...
Debug service listening on ws://127.0.0.1:51964/UEmjv7haU5w=/ws
Syncing files to device AOSP on IA Emulator...
I/Choreographer(14504): Skipped 116 frames! The application may be doing too much work on its main thread.
D/EGL_emulation(14504): eglMakeCurrent: 0xe8804b00: ver 3 1 (tinfo 0xea15ec70)
D/eglCodecCommon(14504): setVertexArrayObject: set vao to 0 (0) 1 2
I/OpenGLRenderer(14504): Davey! duration=2865ms; Flags=1, IntendedVsync=25791957327046, Vsync=25793890660302, OldestInputEvent=9223372036854775807, NewestInputEvent=0, HandleInputStart=25793896676340, AnimationStart=25793898368240, PerformTraversalsStart=25793934314440, DrawStart=25794433733640, SyncQueued=25794660799440, SyncStart=25794663501440, IssueDrawCommandsStart=25794663679640, SwapBuffers=25794747224740, FrameCompleted=25794825369240, DequeueBufferDuration=32086000, QueueBufferDuration=859000,
D/EGL_emulation(14504): eglMakeCurrent: 0xe88045c0: ver 3 1 (tinfo 0xea15e5e0)
D/eglCodecCommon(14504): setVertexArrayObject: set vao to 0 (0) 1 0
I/flutter (14504): The location service on the device is disabled.
您的输出显示"设备上的定位服务被禁用";因此,您应该检查清单文件中的权限。我建议您同时使用粗略权限和精细权限。
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
但在进行地理定位请求之前,您也应该对定位服务进行预先验证。
如果服务已启用,您应该检查:
bool isLocationServiceEnabled = await Geolocator.isLocationServiceEnabled();
print('location enabled: $isLocationServiceEnabled');
然后检查应用程序是否具有权限:
LocationPermission permission = await Geolocator.checkPermission();
print(permission);
如果您没有权限,请请求它们:
LocationPermission permission = await Geolocator.requestPermission();
print(permission);
有了所有这些设置,你可以提出一个安全的请求
Position position = await Geolocator.getCurrentPosition(
desiredAccuracy: LocationAccuracy.low);
print(position);
您可以使用以下代码:
var geolocator = Geolocator();
var locationOptions;
getPermission() async {
return Geolocator().checkGeolocationPermissionStatus();
}
然后在initState((中调用此函数:
getPermission().then((res) {
locationOptions =
LocationOptions(accuracy: LocationAccuracy.high, distanceFilter: 10);
});
geolocator.getPositionStream(locationOptions).listen((Position position) {
setState(() {
lat = position.latitude.toDouble();
long = position.longitude.toDouble();
});
});