同时拥有多个位置提供商
Posted
技术标签:
【中文标题】同时拥有多个位置提供商【英文标题】:More than one location provider at same time 【发布时间】:2012-04-04 20:37:05 【问题描述】:我在定位系统方面遇到了一些问题。 我有一个实现 locationlistener 的服务。 我想尽可能使用网络获得最佳位置,如果网络不够准确(准确度大于 300 公吨),则使用 gps。 问题是这样的。我需要每 5 分钟定位一次(尽可能准确,否则不准确)。 我从一个:
LocationManager lm=(LocationManager)getApplicationContext().getSystemService(LOCATION_SERVICE);
Criteria criteria = new Criteria();
criteria.setAccuracy(Criteria.ACCURACY_COARSE);
criteria.setAltitudeRequired(false);
criteria.setBearingRequired(false);
String provider=lm.getBestProvider(criteria, true);
if(provider!=null)
lm.requestLocationUpdates( provider,5*60*1000,0,this);
在“onLocationChanged”我听位置,当我得到一个精度大于 300mt 的位置时,我想更改为 gps 定位系统。
如果我删除 allupdates 然后请求 gps 更新,如下所示:
lm.removeUpdates((android.location.LocationListener) this);
Criteria criteria = new Criteria();
criteria.setAccuracy(Criteria.ACCURACY_FINE);
criteria.setAltitudeRequired(false);
criteria.setBearingRequired(false);
String provider=lm.getBestProvider(criteria, true);
if(provider!=null)
lm.requestLocationUpdates( provider,5*60*1000,0,this);
系统停止等待 gpsupdate,如果我在一个封闭的房间里,它可以保持几个小时没有位置更新,忽略时间更新指示。 如果 gps 没有在“x”秒内提供位置,有没有办法告诉 locationprovider 切换到网络?或者如何理解 gps 何时没有本地化?
或者如果我同时向 2 个提供商(网络和 gps)请求位置更新,会不会有问题?
有什么建议吗?
【问题讨论】:
【参考方案1】:我正在为您的问题写一个特定的答案,但后来我意识到我的分析器无法与 Android 开发指南提供的 excellent resource 竞争。它解释了位置侦听器的方式、原因、优缺点。
如果您打算在 Android 中使用 GPS,那么它是必读的。它回答了您的上述问题等等。相信我,值得您花时间。
每个 SDK 还提供了示例,这些示例实现了有用的示例。我很确定这是一个位置示例。
【讨论】:
感谢您的链接。现在我用控制来自gps的更新请求的警报更改了我的所有服务。我正在检查 wifi 位置,如果它不够准确,我会检查 gps,如果我在 60 秒内无法获得任何 gpslocation,我会删除 gpslistener 的 locationupdates,让 networklistener 保持打开状态。但它并没有像我想要的那样工作:当我要求 gpsupdate 时,gps 图标正确出现,但它保持固定并且似乎什么都不做,而且我在 60 秒内没有收到位置。 60 年代后,我的服务停止收听,图标消失。我是不是忘了打开 GPS 并获取位置信息? 我只会让听众继续工作。您将在适当时收到更新。时间和空间上的间隔旨在通过设置测量之间的最小距离/时间来切断不必要的回调,以免您受到打扰。只需相信回调中出现的结果,并按照指南的建议分析它们的时间戳和元数据。如果 GPS 锁定后您没有获得任何新位置,那么这些信息可能不值得——我会立即获得新信息,除非我使用的是 wi-fi,这已经是一个很好的解决方案。以上是关于同时拥有多个位置提供商的主要内容,如果未能解决你的问题,请参考以下文章