【问题标题】:LocationRequest and LocationClient.requestLocationUpdatesLocationRequest 和 LocationClient.requestLocationUpdates
【发布时间】:2013-12-13 13:15:30
【问题描述】:

我有一个使用 Google 地图和新的 Fuse Location API 的应用。当位置更改时,我使用此代码获取更新:

locationClient.requestLocationUpdates(new LocationRequest(),
    new LocationListener() {

    @Override
    public void onLocationChanged(Location location) {
        //Some code
    }
});

我在装有 Android 4.3 的 Galaxy Nexus 上没有问题。但是,在我朋友的装有 Android 4.0.4 的手机 (Xperia ST21i) 中,我无法收到这些更新。

我在 Android 文档和 StackOVerflow 上的许多(如果不是全部)问题上看到使用 LocationRequest.create() 而不是 new LocationRequest()。这个新代码在我的手机上仍然可以正常工作;我还没有在朋友的手机上试过。

阅读文档,我猜LocationRequest.create() 是这样的:

public static LocationRequest create() { 
    LocationRequest locationRequest= new LocationRequest();
    locationRequest.setPriority(LocationRequest.PRIORITY_BALANCED_POWER_ACCURACY);
    locationRequest.setFastestInterval(aNumber);
    locationRequest.setInterval(anotherNumber);
    return locationRequest;
}

这两段代码有什么区别,为什么它可以在我的手机上运行,​​但在我朋友的手机上却不行。在我朋友的手机上更改后它会起作用吗?

如果没有,我还需要做什么才能使其正常工作?

【问题讨论】:

  • LocationRequest.create() 只是返回new LocationRequest()。那里没有额外的魔法。
  • aw :/ 这对我来说是个坏消息,因为现在我不知道为什么它在我朋友的手机上不起作用。他激活了gps和wifi。位置服务没有被禁用,因为他拥有最新版本的谷歌地图,并且可以毫无问题地使用它。我真正的问题是,如果我找不到任何解决方案,locationClient.getLastLocation() 将始终返回 null。

标签: android google-maps location google-maps-android-api-2 google-play-services


【解决方案1】:

在许多 4.0.x 设备中实际上存在一个问题,如果您依赖网络级别的位置,OnLocationChanged 不会被正确调用。

AOSP Issue Tracker 的问题报告可能就是您所看到的

正如那里所说,基本上网络级别的位置永远不会刷新,并且由于您使用的是LocationRequest.PRIORITY_BALANCED_POWER_ACCURACY,它会尝试使用最不显眼的方法来尽可能地为您提供更新。如果 GPS 和 Wifi 在该设备上也可用,您仍然永远不会收到更新,我确实觉得有点奇怪。

解决此问题的一种可能方法是将优先级更改为LocationRequest.PRIORITY_HIGH_ACCURACY。如果您认为该解决方案会给您的用户带来麻烦,您可以使用PRIORITY_HIGH_ACCURACY 创建一个新的LocationRequest,并且仅在您的第一种方法失败时使用它。

特别是,我会在您首次发起位置请求时设置一个计时器,并在您的LocationListener 中使用一个标志来指示在该时间范围内是否收到任何结果。如有需要,可提供代码示例。

【讨论】:

  • 请提供代码示例,优先级高精度也无法正常工作,没有收到requestLocationUpdates的任何回调
【解决方案2】:

我设法解决了我的问题。我忘记了连接(onConnected)并不意味着该位置是已知的。但是,在告诉我的朋友打开谷歌地图应用程序并等到它开始显示当前位置之后,我仍然不知道为什么我的代码不起作用,然后再打开我的应用程序。可能 Google 地图应用不会直接或间接使用或更新 Google Fusion API 的位置。

如果你想知道我是如何实现它的,这里有一个链接:MapActivity

更新: MapActivity

【讨论】:

    猜你喜欢
    • 2014-11-24
    • 2017-07-30
    • 2021-06-04
    • 2022-10-30
    • 1970-01-01
    • 2014-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多