我有一个服务实现LocationListener监听GPS和网络.
该应用程序依赖于恒定的位置馈送,但似乎当GPS很难获得locationfix网络位置时不会介入.
manager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 1000 * 30,0, LocationReporterService.this);
manager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 1000 * 60 * 2,0, LocationReporterService.this);
Run Code Online (Sandbox Code Playgroud)
问题
如何确保始终获得位置?
我如何确保如果我没有获得GPS位置,我会获得一个网络位置?
这是一个已知的bug吗?
我应该有2个服务,GPSLocationService和NetworkLocationsService吗?
这个问题有方法解决吗?:)
我同意AlexBottoni的大部分评论,但是在某些方面我无法支持他.
概观
首先,只是为了检查你做得对...
您LocationListener为两个提供商设置相同的内容.要识别您要从哪里恢复位置,您需要像这样测试它:
public void onLocationChanged(Location fix) {
if(fix.getProvider().equals(LocationManager.GPS_PROVIDER)){
//here Gps
} else if(fix.getProvider().equals(LocationManager.NETWORK_PROVIDER)){
//here Network
}
Run Code Online (Sandbox Code Playgroud)
此外,您设置了不同的采集频率.Gps每隔30秒,Network每2分钟提供一个新位置.
由于您没有施加最小距离,因此您应该Location从每个提供商处获得一个新的(只要他们可以获得修复)具有所请求的频率.如果您没有收到修复,是因为他们无法获得修复.
此外,它可能需要一些时间来获得修复(主要是使用Gps),因为它可能需要一些时间来与卫星进行shyncronize并修复一个位置.
倒退
从一个提供商到另一个提供商没有内置的后备.如Alex所说,他们是独立的.我正在使用以下方法来实现回退:
优先提供者
虽然Gps可能无处可用,但最精确的是Network.在我的城镇,我用GPS获得6米精度,用网络获得1公里:-(
两项服务
无论您在哪里注册监听器,活动或服务,将它们分开,只要您提出请求并且提供商可以获得修复,您将获得该位置(假设应用程序中没有错误:-))
最后的笔记
确保您具有权限需求(ACCESS_FINE_LOCATION,INTERNET等).
确保手机设置已启用网络位置(通常默认为禁用)
大多数Gps接收器支持更新有关卫星位置的信息,从而缩短了修复时间.你可以GPS Satus在市场上使用它.
问候.
| 归档时间: |
|
| 查看次数: |
3446 次 |
| 最近记录: |