我正在上有关Udemy的Flutter / Dart课程,在一个新项目的开始,我一直试图使用Geolocater Package。最初的github项目位于here。
本课程的第一步是导入Geolocator程序包,将其添加到pubspec.yml,然后在screens / loading_screen.dart文件的_LoadingScreenState中,您必须添加一个函数:
void getLocation() async {
Position position = await Geolocator()
.getCurrentPosition(desiredAccuracy: LocationAccuracy.low);
print(position);
}
最后,您只需添加getLocation();即可。到同一页面上的onPressed。在本教程中,这很好用,因为他们使用的是我相信的API 26和Geolocator版本3.0.1。但是,我使用的是API 29或30(均无效),并且出现以下错误:
W / ppbrewery.clim(25370):访问隐藏方法 Landroid / content / Context;-> getFeatureId()Ljava / lang / String; (清单, 反射,允许)
我已经对该问题进行了一些研究,似乎可以做到这一点,因为我使用的是API30。但是,我不知道该怎么做或如何获取它以打印我的位置。
请参阅一些文档:
https://developer.android.com/distribute/best-practices/develop/restrictions-non-sdk-interfaces
在底部显示:如何启用对非SDK接口的访问?
但是adb shell设置将global hidden_api_policy 1命令放了起来对我没有任何作用。那可能是因为我使用的是API 30,但我根本不知道。在API 29上似乎也没有执行任何操作。
此外,以上解决方案似乎仅旨在将其修复在开发设备/仿真器上,除非我误解了它。如何为模拟器以及将来的实际部署修复?
答案 0 :(得分:1)
尝试一下。
Geolocator geolocator = Geolocator()..forceAndroidLocationManager = true;
Position position = await Geolocator().getCurrentPosition(desiredAccuracy: LocationAccuracy.low);
您可以通过单击模拟器末尾的三个点来打开此设置
不要忘记像这样在模拟器上设置位置并设置位置。
答案 1 :(得分:0)
我在android模拟器中遇到了同样的问题。在模拟器位置设置中,您必须设置位置,然后在模拟器中打开Google Maps并找到自己的位置。之后,重新启动应用程序,应该没问题。
答案 2 :(得分:0)
获取Geolocator强制Android Location Manager的实例,并在其上调用getCurrentPosition之后。这样,您可以使用LocationManager插件而不是默认的FusedLocationProviderClient插件来检索位置。
Geolocator geolocator = Geolocator()..forceAndroidLocationManager = true;
Position position = await geolocator.getCurrentPosition( desiredAccuracy: LocationAccuracy.low);