我使用以下代码来请求当前位置:
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
事件根本不会发生的问题。昨天我花了一整天的时间让我的代码工作,这是前一天完美无缺的工作。真的很奇怪,有些东西可以正常工作,第二天它就会停止,即使使用相同的源代码也是如此!有人可以给我一个想法吗?
感谢。
答案 0 :(得分:2)
无法立即获得准确,最新的位置。
对于确定位置的设备,它需要跟踪GPS,WiFi,3G塔,这取决于无线电信号强度,传输速度和其他类似的东西。您可以欺骗请求的参数以尝试更快地更新(例如,尝试使用任何可用的提供程序,而不是最佳提供程序)。
作为替代方法,您可以向getLastKnownLocation请求,此方法是同步的,并立即回复系统找到的最后一个位置。问题是“最后一个已知位置”可能是null
(如果系统从未找到任何位置),或者可能非常陈旧(如果最后一个位置是几天前)。