Tor*_*mer 8 android location wifi
我想要获取当前位置.为此我实现了LocationListener并为网络和GPS提供商注册:
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locationListener);
locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, locationListener);
Run Code Online (Sandbox Code Playgroud)
然后我阻塞30秒并使用传递给侦听器的第一个位置
onLocationChanged()
Run Code Online (Sandbox Code Playgroud)
精度为100米或更高的方法.
大部分时间这都很好.如果手机连接到某个Wifi网络,只需一秒钟即可获得正确的位置,精确度约为50米.如果没有Wifi但启用了GPS,那么获取位置当然需要一段时间.
然而,有时候,当连接到Wifi并获得当前位置时,会提供一些旧的(缓存?)之前的"Wifi"位置 - 它可能距离当前位置15分钟,距离15公里.问题是,那
location.getTime()
Run Code Online (Sandbox Code Playgroud)
返回当前时间 - 因此无法知道位置是否过时.
我想我必须实现一个更精细的解决方案 - 我只想知道为什么这些旧的"Wifi"位置具有当前时间戳而不是最初检索时的时间戳.
这是我遇到的一个已知问题,并对发生这种情况的原因进行了一些研究.
以下是我的观察:
首先要了解网络位置的工作原理:Android拥有当前连接到的塔的cellId,然后谷歌使用此ID来执行查找并获取大约50米(其中一个)的近似位置信息最好的)到几千米.如果cellId不正确,如上例所示,那么您将收到错误的位置.
除了使用可以消除这种噪音的自定义算法之外,您无法避免这种情况.就像是
if (location from network) {
if (speed obtained from the difference between previous and current location is greater than say 30 m/s) {
ignore this location as noise
} else {
location is correct
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5768 次 |
| 最近记录: |