如何在Android Studio中使用Geolocator获取位置已使用的



代码。

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();
  });
});

最新更新