定期查询GPS的更好方法

时间:2013-07-22 19:13:30

标签: android gps

我有一个每秒运行一次的计时器。每一秒我都会获得GPS位置并做其他事情。 我想知道哪条路更好:

1-请求单个位置更新,然后获取最后的已知位置

private void timeout(){
        String data[] =new String[DATA_LENGTH];
        locationManager.requestSingleUpdate(LocationManager.GPS_PROVIDER, this, null);

        Location loc = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
.
.
.
}

2-启动位置监听器,然后在我的计时器到期时获取最后一个已知位置

OnCreate(){
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, mlocListener);
}
private void timeout(){
            String data[] =new String[DATA_LENGTH];


            Location loc = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
    .
    .
    .
}

谢谢

PS:请注意,根据产品的要求,我不关心电池

3 个答案:

答案 0 :(得分:1)

requestSingleUpdate是单身,如果你需要经常查询GPS,你一定要选择2。

将全局Location对象保留在内存中,在其他内容中使用它,并在侦听器从LocationManager获取更新时更新它。

答案 1 :(得分:0)

您可以通过requestLocationUpdates收听更改 - 以下代码是一个快速肮脏的示例(未经测试)。请记住,您必须启用位置服务才能使用此功能。

LocationListener locGPSListener= new LocationListener() {...}
LocationListener locNetworkListener= new LocationListener() {...}

mgr = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);
// listens using GPS for location
mgr .requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locGPSListener);
// uses towers for location
mgr .requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, locNetworkListener);
...

答案 2 :(得分:0)

哪种方法更好,取决于

  1. 机器人GPS行为和
  2. 您的申请。
  3. 广告1.如果明确获取位置会提供更新的修正,那么这是一个优势,因为:

    ad 2.如果您的应用程序不想要Android过滤行为,并且您可以更好地过滤它,那么这对您的应用来说会更好。

    示例:(适用于ios,但也可能适用于此:)如果我驾驶汽车接通交通信号灯并进行严厉破坏,那么ios仍然显示5 km / h的速度,尽管我站着不动。我称之为不需要的过滤。

    这与电池无关:如果您通过消息获取位置,或者如果您从电池的角度查询它是相同的。它解决了软件设计问题:(事件与民意调查) 仅在GPS被禁用时才会出现差异,但只有在长时间禁用GPS时才能禁用GPS。