手机空闲时Android requestLocationUpdates

时间:2011-12-07 06:55:54

标签: android geolocation

我想每分钟跟踪我的位置。为此,我使用locManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 60000, 0, pll);

这是我的手机空闲时的日志。

Date     Latitude             Longitude          Accuracy
07:45:35 51.362402459999996 - 6.2174867399999995 (75.0)
07:46:35 51.362402459999996 - 6.2174867399999995 (75.0)
07:47:35 51.362402459999996 - 6.2174867399999995 (75.0)
...
07:50:35 51.362402459999996 - 6.2174867399999995 (75.0) # I'm further than 75m away from my home at that time

我确实每分钟都有一个新的位置,但它完全一样。只是时间更新了。位置没有更新(当我不够移动时可能是正常的)但我觉得奇怪的是坐标完全相同。此外,因为我没有激活无线,它应该相应地定位我CellId(精度为~1000m),在这里我仍然具有75.0的准确度。看来,它是使用无线网络录制的最后一个位置。

任何想法如何记录真实的最后位置(即使精度较低)?

public void onLocationChanged(Location location) {
    System.out.println(new Date(location.getTime())+" "
            +location.getLatitude()+" - "+location.getLongitude()+" ("+location.getAccuracy()+")");
    callback.addEntry(location);
}

3 个答案:

答案 0 :(得分:0)

嗨使用GPS_PROVIDER而不是NETWORK_PROVIDER,如下面的代码

locManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 60000, 0, pll);

NETWORK_PROVIDER只会为您提供固定塔位置,而gps会为您提供准确的更改位置

答案 1 :(得分:0)

你有最近的GSM塔坐标。

答案 2 :(得分:0)

只有在没有无线连接的情况下,似乎没有办法强制使用带有小区的LocationManager来计算位置。 也许另一种方法是使用线程Poor Man GPS中提到的方法:手动计算知道CellId的位置。

伪代码:

onLocationChanged(new_location)
    if isConnected()
       record(new_location)
    else
       cell_location = poorManGPS()
       record(cell_location)
    end

问题当然是我无法在没有互联网连接的情况下查询cell-id数据库。我看到了几个解决方案:

  • 当我有互联网时存储当前(和之前的)手机信号ID,并希望当我没有互联网时我会留在这个
  • 使用手机上的cell id database(但我认为需要root权限)
  • 存储单元格ID以进一步本地化