android开发 传感器采集数据断断续续(锁屏后不能继续正常采集数据)以小米手机为例
有人说,不要锁屏,保持常亮,我个人认为这种方法不可取(触屏会带来误操作;在手机(小米和华为,其他手机没试)上不用这种方法能解决问题。)
由于亲身经历(做项目需要采传感器数据)绕了很多弯路,苦恼好久,想把自己的当时的解决办法分享一下,我想,可能需要注意以下几点:
- 屏幕关闭通常会导致传感器监听器被关闭,有的解决方法是设置屏幕为常亮状态.这种方法不推荐。缺点耗电,有些手机会出现不明问题.
- 可以借鉴其他博主写的WakeLock 保持后台唤醒状态方法,android保持服务不休眠(持续运行)以及唤醒屏幕的方法等等进行尝试
/**
获取电源锁,保持该服务在屏幕熄灭时仍然获取CPU时,保持运行
*/
private void acquireWakeLock() {
if (null == wakeLock) {
PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
wakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK
| PowerManager.ON_AFTER_RELEASE, getClass()
.getCanonicalName());
if (null != wakeLock) {
// Log.i(TAG, "call acquireWakeLock");
wakeLock.acquire();
}
}
}
// 释放设备电源锁
private void releaseWakeLock() {
if (null != wakeLock && wakeLock.isHeld()) {
//Log.i(TAG, "call releaseWakeLock");
wakeLock.release();
wakeLock = null;
}
}
-
我最想说的是,如果用了上面一些方法还不能继续正常连续采集数据。你可以试试设置一下你的手机(注意:各种型号的手机设置不尽相同,需自行百度)。在这里,我就以小米手机3为例。在尝试了上面方法后人不能连续采数据,你可以进行以下设置:
-
打开安全中心,进入电量,右上角设置中设置锁屏断开数据和锁屏清理数据为从不
-
打开安全中心,还是进入电量,在应用智能省电中点击你的传感器采集app出现后台配置中选择无限制(不采取任何限制措施)
最后,采集之前确认电池模式不是省电模式(省电模式会杀死后台进程的,即使有前台服务)
-
补充:上面可能解决部分问题,如果想更彻底解决问题,将运行的核心代码写进前台进程(优先级也比较高,不容易杀死。用户当前操作所必需的进程),代码的话大家在网上搜一搜(前台服务),一大堆,找个适合自己的。这样做只要手机性能不是太差,app开启的不是很多,锁屏后都能成功完成采集数据任务。
补充(2019-12-10):用华为手机锁屏后进行采集数据,出现数据采集丢失,经过几天的查找和尝试,电池模式不要采用任何省电模式(厂商深度定制的系统会杀死后台进行,我们要给采集程序放开所有的权限)。
现在我就在补充一下华为手机的数据采集程序的设置方法:
-
进入设置,点击应用-应用管理,所有的权限全部允许(通知管理中,如果用到了前台服务/进程的话,开启允许通知,在状态栏显示,在屏幕顶部悬浮显示,显示锁屏通知),最重要的是耗电详情中的应用启动管理一定要选择手动管理,选择允许后台活动。这样后台就不会杀死你的程序了,再说一遍!这一步真的很重要)
-
要采集数据之前,一定要保证手机管家中的电池模式不是省电模式,很重要,我还想再次强调一下!!!(因为自己好几次不是因为程序问题,采了好几次长时间的数据不成功,血淋淋的惨痛教训,希望大家能绕开这个坑)