使用传感器检测用户移动,通过定位服务节省电量

7
我正在开发一款跟踪用户位置的应用程序。为了节省电量,我想实现一个空闲区域,使位置管理器在GPS位置上拉动频率较低(甚至停止)。一旦用户再次移动(通过加速计和/或显着移动检测),位置服务将按默认间隔拉取。
一种方法是将空闲区域定义为LocationManager :: requestLocationUpdates中的minDistance参数,但这里的其他用户建议它对电池消耗没有影响,而文档则说明使用此标准来节省电池电量对于位置提供者更加困难:

然而,使用minDistance参数让位置提供者节约电量更加困难,因此minTime应该是节约电池寿命的主要工具。

Google建议使用显著动作传感器来检测用户位置的变化:
在高层次上,显著动作检测器用于减少定位功耗。当定位算法检测到设备静止时,它们可以切换到低功耗模式,在这种模式下,它们依赖于显著运动来唤醒设备,以便在用户改变位置时使用。
这是否意味着如果显著动作传感器存在,位置管理器默认会使用它,还是我需要激活或实现某些内容才能使位置服务使用它?
那加速度计呢?我的问题很大一部分在于使用加速度计检测用户何时开始移动是否会节省任何电力,因为使用加速度计将是另一个需要功率和回调处理的传感器。谷歌列出了一些低功耗的加速度计传感器(包括显著运动传感器),而有些则没有。

是否可以通过让GPS休眠并使用传感器检测用户移动来节省电池电量,然后再重新唤醒GPS?


马丁,你有没有找到解决位置更新时省电的方法? - maddy d
不,我在完成这篇文章的研究后就没有再继续工作了。我已经向一些人发送了几封电子邮件,但似乎每个人都在度假。如果我得出结论,我会发布一个答案。感谢您的跟进! - Martin
是的,看起来每个人都在度假,关于这个特定的话题;);) - maddy d
@Martin - 这个有更新了吗? - Gurpreet
有没有其他的方式可以检测到动作并唤醒设备呢?我有一款搭载联发科芯片的设备,它没有“重要运动”传感器(根据传感器检测应用程序),但却具有内置功能,在移动时自动开启屏幕。这是怎么实现的呢? - ransh
1个回答

1

LocationManager::requestLocationUpdates 使用高级方法 setSmallestDisplacement() 通过使用 significant motion sensor 来获取位置更新。

mLocationRequest = new LocationRequest();
mLocationRequest.setInterval(20*1000);
mLocationRequest.setFastestInterval(10*1000);
mLocationRequest.setSmallestDisplacement(10F); //meters

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接