Android的LocationListener的切换,从GPS到网(Android Locatio

2019-07-04 01:46发布

我有实施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);

问题
如何确保我总是得到一个位置?
我怎样才能确保,如果我没有得到一个GPS定位,我得到一个网络的定位?
它是一个已知的bug?
我应该有2个服务,GPSLocationService和NetworkLocationsService?
这个问题有方法解决吗? :)

Answer 1:

我同意大部分来自AlexBottoni很好的答案评论,但在某些方面,我不能suppot他。

概观

首先,只是为了检查你正在做的是正确的?

您设置相同LocationListener两个供应商。 为了从你在哪里reciving你需要测试它像这样的位置indentify:

public void onLocationChanged(Location fix) {
    if(fix.getProvider().equals(LocationManager.GPS_PROVIDER)){
        //here Gps
    } else if(fix.getProvider().equals(LocationManager.NETWORK_PROVIDER)){
        //here Network
    }

此外,您设置一个不同的采集频率。 Gps将提供每30秒一个新的位置Network每隔2分钟。

当你没有对他处以最小距离,你应该得到一个新的Location (只要他们能得到修复)与所要求的频率从供应商中的每一个。 如果您没有收到一个修复,是因为他们没有能够获得一个。

此外,可能需要稍长随后请求将得到修复(主要是与GPS),因为它可能需要一些时间来shyncronize与卫星和固定的位置。

倒退

没有builted,在后备从一个供应商到另一个。 他们是independet,由亚历克斯说。 我用下面的方法来实现回退:

  • 注册全球定位系统监听器和启动一个定时器
  • 在每一个GPS定位,重新启动计时器
  • 如果计时器reachs年底,注册网络监听器(GPS听者不断注册)
  • 如果新的GPS位置到达,注销网络监听器,重启定时器

最好提供商

虽然Gps可能无法使用everyhere,是迄今为止最精确,然后Network 。 在我的家乡,我得到6米的精度与GPS 1公里,网络:-(

两个服务

不要紧,你登记听众,活动或服务,独立OT在一起,只要你要求他们和供应商能得到修复,你会得到的位置(假定应用程序:-)没有bug)

最后说明

确保您拥有权限的需要(ACCESS_FINE_LOCATION,网络等)。

确保手机安装启用网络位置(一般默认值为Disable)

大多数GPS接收器支持更新有关卫星位置,从而提高了固定的时间信息。 您可以使用GPS Satus从市场,做到这一点。

问候。



Answer 2:

这是很奇怪的,因为据我所知,Android不回落到第二选择(网络位置提供商)只有当第一个(GPS)不能正常工作。 这两个位置提供商indipendent,应indipendently发送位置更新到你的听众给对方。 因此,第一个(GPS)不应该能够阻止在任何情况下,第二个(网络)。

关于你的问题:

如何确保我总是得到一个位置?

你不知道。 有没有办法来确定。 有些情况下,你不能得到任何的位置锁定,只是因为没有位置的参考是可用的情况下。 这往往是在地铁/地铁站的情况。 没有GPS,没有蜂窝天线(不是每个人都住在纽约或伦敦......),没有Wi-Fi热点,所以没有办法确定你的当前位置。 信不信由你,在我镇的新医院,我们目前所面对这种情况,因为GPS星座是不可见的(室内...),没有Wi-Fi热点都尚未安装,并且唯一可用的CellID天线只是几百米的距离,所以你会得到相同的信号无处不在,无论是外部和建筑物内部。

我怎样才能确保,如果我没有得到一个GPS定位,我得到一个网络的定位?

你不能,无论是。 这取决于可用的网络。 无论如何,你可以检查你的代码和开关的位置提供得到什么,从一个到下一个,直到你得到一个可用的位置固定。

它是一个已知的bug?

不,这是不是一个错误。 它更多的是对现有技术的极限知道。

我应该有2个服务,GPSLocationService和NetworkLocationsService?

这是值得尝试。 尼克已经说了,这不应该是一个问题,但检查不应该伤害。

这个问题有方法解决吗? :)

如果您的应用程序旨在主要用于在城市环境(镇),很有可能你应该使用网络位置引擎作为你的主要定位引擎。 如今,每个乡镇由蜂窝电话天线的一大组,并通过大集Wi-Fi热点,所以你更容易得到比从GPS一个网络位置提供了良好的位置锁定覆盖。 这是在高层建筑和狭窄的街道城镇尤其如此(这并不仅仅意味着纽约。即使在这里在威尼斯我们与GPS的问题)。 网络引擎也得到首次定位速度更快,工作室内也是如此。

回落到GPS只有当网络位置发动机不能正常工作。



文章来源: Android LocationListener Switching from GPS to Network