访问隐藏方法时出现问题。 Android,Flutter,Geolocator

时间:2020-07-09 16:51:35

标签: android flutter dart flutter-dependencies

我正在上有关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上似乎也没有执行任何操作。

此外,以上解决方案似乎仅旨在将其修复在开发设备/仿真器上,除非我误解了它。如何为模拟器以及将来的实际部署修复?

3 个答案:

答案 0 :(得分:1)

尝试一下。

Geolocator geolocator = Geolocator()..forceAndroidLocationManager = true;
Position position = await Geolocator().getCurrentPosition(desiredAccuracy: LocationAccuracy.low);

您可以通过单击模拟器末尾的三个点来打开此设置

不要忘记像这样在模拟器上设置位置并设置位置。

enter image description here

答案 1 :(得分:0)

我在android模拟器中遇到了同样的问题。在模拟器位置设置中,您必须设置位置,然后在模拟器中打开Goog​​le Maps并找到自己的位置。之后,重新启动应用程序,应该没问题。

答案 2 :(得分:0)

获取Geolocator强制Android Location Manager的实例,并在其上调用getCurrentPosition之后。这样,您可以使用LocationManager插件而不是默认的FusedLocationProviderClient插件来检索位置。

Geolocator geolocator = Geolocator()..forceAndroidLocationManager = true;
Position position = await geolocator.getCurrentPosition( desiredAccuracy: LocationAccuracy.low);