通过android中的后台服务获取准确的路径历史
Posted
技术标签:
【中文标题】通过android中的后台服务获取准确的路径历史【英文标题】:Getting an accurate path history via background service in android 【发布时间】:2019-09-08 17:00:36 【问题描述】:我的应用需要一个始终跟踪手机位置的服务。它用于创建用户行进的路径,将显示在应用程序中,并且应该可以区分步行和其他移动方式。 该位置应具有高精度,并结合时间戳和速度,并保存在 sql lite db 中,以便在我的应用程序中进一步使用。
解决这个问题的最佳方法是什么?我遇到后台服务无法经常获取位置。我最后的手段是让它成为前台服务,但也许有人已经解决了这个问题。 (例如,是否有可能以可用的格式获取谷歌跟踪的位置数据?) 提前致谢!
编辑: 很抱歉我不够清楚。 问题是,在我的研究过程中,我发现有几种方法可以获取所需的数据。位置管理器和融合位置。 所有这些都受到服务在后台运行时允许您获取 GPS 数据的频率的限制,这可能会降低路径准确性。一些解决方案使其成为前台服务,因此它不会受到相同的限制,但这不是我想要实现的东西。
提出一个更精确的问题:在不消耗太多能量的情况下,使用后台服务长时间收集准确(!)GPS 位置数据的最佳方法是什么?也可以分批使用,因为它不是实时使用的,而是稍后评估的。
【问题讨论】:
【参考方案1】:试着只问一些具体的问题。否则,没有人知道如何帮助或回答你。既然你是这个平台的新人,我会尽力回答你的问题。
首先。 “谷歌跟踪的数据”来自Location
类型。您可以使用LocationManager
请求位置更新。
只需在您的首选课程中注册位置更新:
# Get Instance of LocationManager
LocationManager locationManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);
# Create Criteria / What Accuracy of do you need? No Requirement means also very week locations will be used
Criteria gpsCriteria = new Criteria();
gpsCriteria.setAccuracy(Criteria.NO_REQUIREMENT);
gpsCriteria.setAltitudeRequired(false);
gpsCriteria.setBearingAccuracy(Criteria.NO_REQUIREMENT);
gpsCriteria.setCostAllowed(false);
gpsCriteria.setPowerRequirement(Criteria.NO_REQUIREMENT);
// Get the wanted provider
String gpsProvider = locationManager.getBestProvider(gpsCriteria, true);
// Request for Location Updates your Class must implement a LocationListener Every second a location is received
locationManager.requestLocationUpdates(gpsProvider, 1000, 0, this);
Location location = locationManager.getLastKnownLocation(gpsProvider);
在你的类中,你实现了上面提到的 LocationListener。在onLocationChange
中,您可以获得设备的位置更新。我不知道你想如何显示用户的轨迹。但是您可以从此位置对象获取纬度和经度。您还有质量等指标。
@Override
public void onLocationChanged(Location location)
location.getLatitude() ...
如果您想一直跟踪位置,则必须实现 BackgroundService。您在onStartCommand
中的位置更新请求。但是,您必须处理使设备进入睡眠状态的 DeepSleep 和其他功能。但是您可以使用WakefulBroadcastReciever
和AlarmManager
来处理这个问题。您创建了一个警报,该警报发送接收者接收到的意图,如果服务设置为离线,接收者将重新启动服务。但要小心处理,因为它会耗尽设备的电池,我不推荐!仅用于一些特殊的业务用途。
【讨论】:
以上是关于通过android中的后台服务获取准确的路径历史的主要内容,如果未能解决你的问题,请参考以下文章
通过AsyncTask访问后台后得到的返回数据在Android端显示
如何在后台运行 android 服务 24x7 以获取用户的位置