我正在开发跟踪用户位置的前台服务。为了节省电池服务请求,每5分钟通过LocationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, listener)
发出一次位置请求,并且onLocationChanged(Location location)
触发后,它会禁用位置监听器LocationManager.removeUpdates(listener)
。在此特定项目中,请勿使用Google Play服务,因此请使用LocationManager,这一点很重要。
作为一种额外的省电措施,服务通过SensorManager.registerListener(alistener, accelerometerSensor, SensorManager.SENSOR_DELAY_UI)
订阅加速度计事件,以检测设备何时静止并禁用位置更新。这个想法是使用有效运动传感器来再次启用位置侦听器,因此,一旦检测到设备仍然(正常工作),位置侦听器和加速度计侦听器将被禁用并启用有效运动传感器触发。触发器触发加速度计并立即启用位置侦听器。
不幸的是,重要的运动传感器在设置后立即启动(即使手机仍在运行)并按设计被禁用。不幸的是,这种行为扼杀了整个方法。问题是这是设备特定的问题(魅族M6注意,传感器是正常创建的并且不是null)还是整个方法都不对?