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