1

我有一个每秒运行的计时器。每秒钟我都会得到 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:请注意,根据产品的要求,电池对我来说不是问题

4

3 回答 3

1

requestSingleUpdate意味着单身,如果您需要经常查询 GPS,您绝对应该选择选项 2。

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

于 2013-07-22T20:12:14.670 回答
0

哪种方法更好,取决于

  1. Android 的 GPS 行为和
  2. 你的申请。

广告 1. 如果明确获取位置可以提供更新的修复,那么这是一个优势,因为:

广告 2. 如果您的应用程序不想要 android 过滤行为,并且您可以自己更好地过滤它,那么这对您的应用程序会更好。

示例:(适用于 ios,但也适用于此处:)如果我开着我的车开到交通信号灯处,并且猛烈刹车,那么 ios 仍然显示 5 公里/小时的速度,尽管我站着不动。这我称之为不需要的过滤。

这与电池无关:如果您通过消息获取位置,或者从电池的角度查询它是相同的。这更像是一个软件设计问题:(事件与轮询)
只有在禁用 GPS 时才会有所不同,但禁用 GPS 只有在可以长时间禁用时才有意义。

于 2013-07-22T20:14:32.270 回答
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);
...
于 2013-07-22T19:27:18.007 回答