解决手机锁屏后无法获取传感器数据终极方案 以小米、华为手机为例

android开发 传感器采集数据断断续续(锁屏后不能继续正常采集数据)以小米手机为例

有人说,不要锁屏,保持常亮,我个人认为这种方法不可取(触屏会带来误操作;在手机(小米和华为,其他手机没试)上不用这种方法能解决问题。)

由于亲身经历(做项目需要采传感器数据)绕了很多弯路,苦恼好久,想把自己的当时的解决办法分享一下,我想,可能需要注意以下几点:

  1. 屏幕关闭通常会导致传感器监听器被关闭,有的解决方法是设置屏幕为常亮状态.这种方法不推荐。缺点耗电,有些手机会出现不明问题.
  2. 可以借鉴其他博主写的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;
        }
    }
  1. 我最想说的是,如果用了上面一些方法还不能继续正常连续采集数据。你可以试试设置一下你的手机(注意:各种型号的手机设置不尽相同,需自行百度)。在这里,我就以小米手机3为例。在尝试了上面方法后人不能连续采数据,你可以进行以下设置:

    • 打开安全中心,进入电量,右上角设置中设置锁屏断开数据和锁屏清理数据为从不

    • 打开安全中心,还是进入电量,在应用智能省电中点击你的传感器采集app出现后台配置中选择无限制(不采取任何限制措施)

    最后,采集之前确认电池模式不是省电模式(省电模式会杀死后台进程的,即使有前台服务)

补充:上面可能解决部分问题,如果想更彻底解决问题,将运行的核心代码写进前台进程(优先级也比较高,不容易杀死。用户当前操作所必需的进程),代码的话大家在网上搜一搜(前台服务),一大堆,找个适合自己的。这样做只要手机性能不是太差,app开启的不是很多,锁屏后都能成功完成采集数据任务。

补充(2019-12-10):用华为手机锁屏后进行采集数据,出现数据采集丢失,经过几天的查找和尝试,电池模式不要采用任何省电模式(厂商深度定制的系统会杀死后台进行,我们要给采集程序放开所有的权限)。
现在我就在补充一下华为手机的数据采集程序的设置方法:

  1. 进入设置,点击应用-应用管理,所有的权限全部允许(通知管理中,如果用到了前台服务/进程的话,开启允许通知,在状态栏显示,在屏幕顶部悬浮显示,显示锁屏通知),最重要的是耗电详情中的应用启动管理一定要选择手动管理,选择允许后台活动。这样后台就不会杀死你的程序了,再说一遍!这一步真的很重要)

  2. 要采集数据之前,一定要保证手机管家中的电池模式不是省电模式,很重要,我还想再次强调一下!!!(因为自己好几次不是因为程序问题,采了好几次长时间的数据不成功,血淋淋的惨痛教训,希望大家能绕开这个坑)

  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值