【发布时间】:2020-08-11 19:22:30
【问题描述】:
我在 Flutter Project 中使用 Geolocator 插件。我已经添加了 Pubspecs.yaml 文件并在 AndroidManifest 文件中添加了权限。
Pubspecs.yaml
dependencies:
http: ^0.12.0
flutter:
sdk: flutter
shimmer: ^1.0.1
font_awesome_flutter: ^8.8.1
geocoder: ^0.2.1
geolocator: ^5.3.1
Android 清单
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
我正在使用 SDK 28 - compileSdkVersion 28
这是位置访问的代码。
String _locationMessage = "";
void _getCurrentLocation() async {
print('location');
final position = await Geolocator().getCurrentPosition(desiredAccuracy: LocationAccuracy.high);
print(position);
setState(() {
_locationMessage = "${position.latitude}, ${position.longitude}";
});
}
当我在 Button Pressed 上调用 _getCurrentLocation() 时。它正在显示对话框以允许在 App 中使用三个选项访问位置。
Allow all the time
Keep While-In-Use Access
Keep and Don't Ask Again
选择 Keep While-In-Use Access 后,它会在调试控制台中显示以下消息。
E/location_permissions( 7592): Flutter result object is null.
我做错了什么?
另外,我想知道当我们尝试访问位置时它会一直询问还是只询问一次?
编辑
如果我选择 始终允许,那么我的应用将停止响应。我的意思是如果按下按钮没有任何反应。我还需要从手机上卸载它并再次运行它,然后它开始提示权限。
编辑 2
我发现了一件奇怪的事情。如果位置服务停止/未启用,那么我将得到空值。如果我手动启用位置,那么它就会开始给我位置。
【问题讨论】:
-
正如您在编辑 2 中指出的那样,即使您的应用具有可用的位置权限并且您的设备位置已关闭;你不会得到任何位置数据,你会得到空数据(这就是发生的事情)。该权限将询问一次(除非您在 Android 中选择拒绝)。我认为冻结应用程序与始终允许无关,这可能是您在那之后正在做的其他事情。 (请贴出按钮代码和使用地点
_locationMessage) -
感谢 cmets Midhun。我发现如果位置服务停止,它将返回 null 的原因。首先需要启用它,然后它才能工作。现在,我正在尝试查找如何使用此 null 值向用户显示启用位置服务的提示。
标签: flutter dart flutter-plugin