当我尝试获取当前位置时,我总是收到该消息。我正在真实设备上运行我的应用程序。我按照此处的文档说明进行操作地理定位器插件。首先它获取位置,然后退出应用程序并再次启动它后,它说
设备上的定位服务已禁用
为什么即使我已经启用了定位服务,我仍然收到该错误?
class LocationController extends GetxController{
var position = Position().obs;
var lat = 0.00.obs;
var long = 0.00.obs;
Future getLocation() async {
try{
position.value = await Geolocator.getCurrentPosition(desiredAccuracy: LocationAccuracy.high);
lat.value = position.value.latitude;
long.value = position.value.longitude;
} catch (e){
print(e);
}
}
}
打电话...
locationController.getLocation();
您很可能给出了位置“
permission
”,但服务本身(GPS 服务)已禁用。
需要注意的重要一点是权限与启用的服务不同。您的位置权限可能已打开,但
GPS
可能已关闭。
此时您会收到此错误日志。 您可以使用 Geolocator 插件首先检查 locationService 的状态
await Geolocator.isLocationServiceEnabled();
如果此布尔值为 false,您可以请求打开 GPS 服务
await Geolocator.openLocationSettings();
下载并导入插件
import 'package:geocoding/geocoding.dart';
import 'package:geolocator/geolocator.dart';
在你的AndroidManifest中添加权限
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
初始化变量
Position _currentPosition;
String _currentAddress = "";
当前位置功能
_getCurrentLocation() async {
await Geolocator.getCurrentPosition(desiredAccuracy: LocationAccuracy.best)
.then((Position position) {
setState(() {
//Pass the lat and long to the function
_getAddressFromLatLng(position.latitude, position.longitude);
});
}).catchError((e) {
print(e);
});
}
_从LatLng获取地址
_getAddressFromLatLng(double latitude, double longitude) async {
try {
List<Placemark> p = await placemarkFromCoordinates(latitude, longitude);
Placemark place = p[0];
setState(() {
_currentAddress = "${place.locality}";
print(_currentAddress);
});
} catch (e) {
print(e);
}
}
如果出现上述问题只需运行
flutter clean
,卸载应用程序然后重新启动手机并再次运行项目