我有一个每秒运行一次的计时器。每一秒我都会获得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:请注意,根据产品的要求,我不关心电池
答案 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.如果明确获取位置会提供更新的修正,那么这是一个优势,因为:
ad 2.如果您的应用程序不想要Android过滤行为,并且您可以更好地过滤它,那么这对您的应用来说会更好。
示例:(适用于ios,但也可能适用于此:)如果我驾驶汽车接通交通信号灯并进行严厉破坏,那么ios仍然显示5 km / h的速度,尽管我站着不动。我称之为不需要的过滤。
这与电池无关:如果您通过消息获取位置,或者如果您从电池的角度查询它是相同的。它解决了软件设计问题:(事件与民意调查) 仅在GPS被禁用时才会出现差异,但只有在长时间禁用GPS时才能禁用GPS。