Flutter地理位置定位器软件包未检索位置

时间:2019-02-20 09:50:28

标签: google-maps google-maps-api-3 flutter geolocation

我已经在geolocator存储库https://github.com/BaseflowIT/flutter-geolocator/issues/199

上发布了一个问题

这需要geolocator软件包不检索位置。他们最近发布了新版本3.0.0,此后我只有余波。

我使用的是正确的依赖项:

dependencies:
 geolocator: '^3.0.0'

targetSdkVersion 28 and compileSdkVersion 28

Flutter医生给了我

[✓] Flutter (Channel stable, v1.0.0, on Mac OS X 10.14.3 18D109, locale en-US)
[✓] Android toolchain - develop for Android devices (Android SDK 28.0.3)
[✓] iOS toolchain - develop for iOS devices (Xcode 10.1)
[✓] Android Studio (version 3.2)
[✓] IntelliJ IDEA Community Edition (version 2018.2.5)
[✓] Connected device (1 available)

• No issues found!

一旦我调用await Geolocator().getCurrentPosition(desiredAccuracy: LocationAccuracy.high);,代码就不会返回任何内容,并且在终端中显示以下输出:

  

I / DynamiteModule(4233):考虑本地模块   com.google.android.gms.maps_dynamite:0和远程模块   com.google.android.gms.maps_dynamite:221 I / DynamiteModule(4233):   com.google.android.gms.maps_dynamite的选定远程版本,   版本> = 221 V / DynamiteModule(4233):炸药加载程序版本> = 2,   使用loadModule2NoCrashUtils W / System(4233):引用了ClassLoader   未知路径:W / System(4233):ClassLoader引用的未知路径:   /data/user_de/0/com.google.android.gms/app_chimera/m/00000030/n/armeabi-v7a   W / System(4233):ClassLoader引用的未知路径:   /data/user_de/0/com.google.android.gms/app_chimera/m/00000030/n/armeabi   I / Google Maps Android API(4233):Google Play服务客户端版本:   12451000 I / Google Maps Android API(4233):Google Play服务   软件包版本:15090018 W / DynamiteModule(4233):本地模块   com.google.android.gms.google的描述符类不能证明   找到了。 I / DynamiteModule(4233):考虑本地模块   com.google.android.gms.googlecertificates:0和远程模块   com.google.android.gms.google证书:4 I / DynamiteModule(4233):   com.google.android.gms.googlecertificates的选定远程版本,   版本> = 4 W /系统(4233):ClassLoader引用的未知路径:   /data/user_de/0/com.google.android.gms/app_chimera/m/0000002f/n/armeabi-v7a   W / System(4233):ClassLoader引用的未知路径:   /data/user_de/0/com.goo`gle.android.gms/app_chimera/m/0000002f/n/armeabi

我花了很多时间。我是新手,但我知道我可能会错过一件事以使其正常工作。

6 个答案:

答案 0 :(得分:1)

嘿,@ wagnerdelima面临同样的挑战,我可以通过以下方法解决:

将targetSdkVersion 28和compileSdkVersion 28更改为targetSdkVersion 27和compileSdkVersion 27,并更改为geolocator:'^ 3.0.0'到geolocator:^ 2.1.1,如下所示:

依赖性:   扑:     SDK:颤振   地理位置:^ 2.1.1   Permission_handler:“ 2.1.2”   google_api_availability:“ 1.0.4”

这是插入符号^的结果,它采用的是最新的google_api_availability,已迁移到android x。

祝一切顺利!

答案 1 :(得分:1)

在iOS上,您需要将以下条目添加到Info.plist中 文件(位于ios / Runner下)以访问设备的 位置。只需打开您的Info.plist文件并添加以下内容:

<key>NSLocationWhenInUseUsageDescription</key>
<string>This app needs access to location when open.</string>
<key>NSLocationAlwaysUsageDescription</key>
<string>This app needs access to location when in the background.</string>
<key>NSLocationAlwaysAndWhenInUseUsageDescription</key>
<string>This app needs access to location when open and in the background.</string>

答案 2 :(得分:0)

我面临着同样的问题。但是我的应用程序在添加此功能后开始运行。

[ Geolocator geolocator = Geolocator()..forceAndroidLocationManager = true; ]

希望它会起作用。

    Future<void> getCurrentLocation() async {
    try {
      Geolocator geolocator = Geolocator()..forceAndroidLocationManager = true;

      Position position = await Geolocator().getCurrentPosition(
        desiredAccuracy: LocationAccuracy.best,
      );

      return position;
    } catch (err) {
      print(err.message);
    }
  }

祝一切顺利。

答案 3 :(得分:0)

首先,请检查您使用的设备和Flutter版本。 我只有一个设备,即Google的Nexus 6P和Flutter版本1.9.1 + hotfix.6,遇到相同的问题。问题出在“ geolocator”软件包上,因为所有其他设备都可以正常工作。

我推荐new_geolocation。到目前为止,它解决了所有设备的问题。

第二,我如何使用它,自述文件here并没有帮助,因此在Github here上进行了示例项目,并使用了与该示例相同的方法来获得准确的结果。

我希望它会有所帮助。

答案 4 :(得分:0)

我在这个问题上苦苦挣扎了大约2天。在那之后,我发现了这个(Mac):

  1. 在模拟器中,iOS仍然无法运行;
  2. 连接iOS真实设备按照以下步骤在XCode中打开iOS模块
  3. 右键单击文件夹项目
  4. 选择Flutter->在XCode中打开iOS模块
  5. 在XCode上,选择TAGETS-> Runner
  6. 在签名和功能中:
  7. 组建团队
  8. 将捆绑包标识符更改为唯一的标识符(例如:co.test.app456)
  9. 在XCode中运行您的应用程序(它将运行)
  10. 关闭XCode并返回Flutter中的项目
  11. 选择真正的iOS设备并运行您的应用

答案 5 :(得分:0)

我遇到了同样的问题现在可以了,我刚刚将 forceAndroidLocationManager: true 添加到 Geolocator.getCurrentPosition。

Position position = await 
    Geolocator.getCurrentPosition(forceAndroidLocationManager: true,
    desiredAccuracy: LocationAccuracy.lowest);