Android studio 如何在Android Studio中使用地理定位器获取位置?

Android studio 如何在Android Studio中使用地理定位器获取位置?,android-studio,flutter,Android Studio,Flutter,已使用的代码 import 'package:flutter/material.dart'; import 'package:geolocator/geolocator.dart'; class LoadingScreen extends StatefulWidget { @override State<StatefulWidget> createState() { return _LoadingScreenState(); } } class _Loading

已使用的代码

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();
  } 
}
您的输出显示“设备上的位置服务已禁用”,因此您可能需要检查清单文件中的权限。我建议你同时使用粗糙和精细的权限


但是,在执行地理定位请求之前,您也应该对定位服务进行预先验证

如果服务已启用,则应选中:

bool isLocationServiceEnabled=等待地理定位器。isLocationServiceEnabled();
打印('location enabled:$isLocationServiceEnabled');
然后检查应用程序是否具有权限:

LocationPermission=wait geologitor.checkPermission();
印刷(许可);
如果您没有权限,请询问:

LocationPermission=wait geologitor.requestPermission();
印刷(许可);
通过所有这些设置,您可以提出安全请求

Position Position=wait geologitor.getCurrentPosition(
期望精度:定位精度。低);
印刷(职位);

您可以使用以下代码:

var geolocator = Geolocator();
var locationOptions;


getPermission() async {
return Geolocator().checkGeolocationPermissionStatus();
}
然后在initState()中调用此函数:


您在清单文件中授予位置权限了吗?是的,我在模拟器代码中请求了它的权限-好的,现在我尝试了这个,它说的是“i/flatter(15589):启用位置:真i/flatter(15589):LocationPermission.denied i/flatter(15589):LocationPermission.always i/flatter(15589):设备上的位置服务已禁用。'好的,因此您没有位置权限,您应该尝试重新安装应用程序,查看它是否请求权限。如果它不起作用,你可以使用这个插件来管理权限。但是,如果你想在中间看到结果,你可以进入手机配置->应用->你的应用->权限并在那里启用位置权限,然后你可以使用第二个插件来避免将来出现此类问题。我按照你说的重新安装了应用,并查看了应用权限,该应用的位置服务已启用,但是输出仍然没有变化。好吧,我读了第一篇文章,上面说它只需要访问位置许可。第二,您必须在通知栏中检查位置是否已启用第三,在右侧转到“更多”,在“位置”选项卡上标记一个位置并设置位置,以查看它是否工作第四,尝试使用真实设备,在模拟器上发生的次数太多,它们无法使用位置颤振代码。谢谢,但它不会停止,一次又一次地打印纬度和经度。因为它是一个流并返回更改的位置。如果需要位置,可以使用以下代码:Position Position=wait geological.getCurrentPosition(desiredAccuracy:LocationAccurance.high);如果你在上面提到我问这个问题的地方,我使用了你刚写的代码,这就是为什么我贴出我没有从代码中得到位置的原因。
var geolocator = Geolocator();
var locationOptions;


getPermission() async {
return Geolocator().checkGeolocationPermissionStatus();
}
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();
  });
});