【问题标题】:Calling manually getLastKnownLocation with service使用服务手动调用 getLastKnownLocation
【发布时间】:2012-11-14 08:55:19
【问题描述】:

我想通过特定的时间间隔(例如每 30 秒获取一次)获取用户的当前位置,为此我编写了一个管理此调用操作的服务。按特定时间间隔调用 getLastKnownLocation 是可以的,但每次它都会给我相同的位置信息。我运行应用程序并开始开车,但没有任何改变。

如果我实现 LocationListener 并使用 onLocationChanged,那么即使我将位置管理器设置如下,这次特定的时间间隔也不起作用。

_locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, (1 * 20 * 1000), 1, this); // recall in every 20 seconds or distance between 200 meters

为什么即使我改变了我的位置,我总是得到相同的位置?

【问题讨论】:

    标签: android gps location locationmanager


    【解决方案1】:

    也许您没有设置任何标准或提供了一个糟糕的提供商。您是否记得在清单中设置必要的权限?

    您可以使用它来请求位置更新:

    // Get best providers and set criteria
    LocationManager lm;
    Criteria crit = new Criteria();
    crit.setAccuracy(Criteria.ACCURACY_FINE);
    String towers = lm.getBestProvider(crit, false);
    
    // Set provider and update interval
    lm.requestLocationUpdates(towers, 5000, 20, this); // minimum 5 seconds, 20 meters
    

    请记住,在 requestLocationUpdates 中设置的时间间隔是最小的,并且不准确。

    获取最后一个已知位置:

    LocationManager locationManager = ((LocationManager) getSystemService(Context.LOCATION_SERVICE));
    Location location = locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
    

    获取经度和纬度:

    location.getLatitude();
    location.getLongitude(); 
    

    这对我有用。

    【讨论】:

    • 其实我只是想知道 getLastKnownLocation 是如何工作的?为什么它一次又一次地给我相同的位置信息?
    • @MustafaGüven:据我了解,getLastKnownLocation 是一种完全被动的方法,它只返回手机的最后一个定位。因此,如果任何应用程序检索到设备的当前位置,您将从 getLastKnownLocation 中获取。但是如果没有人检索到任何位置,它会返回 NULL 甚至是一个非常非常古老的位置。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-27
    相关资源
    最近更新 更多