立即获取当前位置

时间:2013-12-17 08:34:50

标签: google-maps xamarin.android google-maps-android-api-2

我使用以下代码来请求当前位置:

private void RequestCurrentLocation()
{
    Criteria locationCriteria = new Criteria () { Accuracy = Accuracy.NoRequirement, PowerRequirement = Power.NoRequirement };

    this.mgr = GetSystemService (Context.LocationService) as LocationManager;
    String locationProvider = this.mgr.GetBestProvider (locationCriteria, true);
    this.mgr.RequestLocationUpdates (locationProvider, 0, 0, this);
}

由于我只需要一次位置,因此我会在RemoveUpdates()被提出后立即致电OnLocationChanged,然后继续进行其他工作:

public void OnLocationChanged (Location location)
{
    this.mgr.RemoveUpdates (this);

    //Rest of the method
}

我面临两个问题:

1)虽然我在RequestLocationUpdates的距离和时间参数中提供了零,但在OnLocationChanged被触发之前仍需要至少2-3秒。我怎样才能瞬间完成?

2)我间歇性地面对OnLocationChanged事件根本不会发生的问题。昨天我花了一整天的时间让我的代码工作,这是前一天完美无缺的工作。真的很奇怪,有些东西可以正常工作,第二天它就会停止,即使使用相同的源代码也是如此!有人可以给我一个想法吗?

感谢。

1 个答案:

答案 0 :(得分:2)

无法立即获得准确,最新的位置。

对于确定位置的设备,它需要跟踪GPS,WiFi,3G塔,这取决于无线电信号强度,传输速度和其他类似的东西。您可以欺骗请求的参数以尝试更快地更新(例如,尝试使用任何可用的提供程序,而不是最佳提供程序)。

作为替代方法,您可以向getLastKnownLocation请求,此方法是同步的,并立即回复系统找到的最后一个位置。问题是“最后一个已知位置”可能是null(如果系统从未找到任何位置),或者可能非常陈旧(如果最后一个位置是几天前)。