Sleep as Android
在鼾声、梦话和呼吸频率的监测中 , 麦克风等声学元器件就起到了至关重要的作用 。 深夜的卧室里 , 环境一般都很安静 , 背景噪音是非常少的 , 所以声音数据的采集就比较有用处了 。 但考虑到功耗和存储限制 , App 一般不会整晚录音 , 那样生成的文件太大 , 也不便于分析 , 而是对分贝进行测量 , 大于设定阈值才会写入文件 。
Sleep as Android 的简介中提到了用声纳原理来监测身体在呼吸时的起伏 , 这样就可以避免使用加速度传感器 。 类似的原理在渔业和军事上早已广泛运用 , 很多定位设备都会通过发射声波信号和接收反射信号来判断目标位移 。
在我曾参与过的睡眠功能的开发中 , 并没有使用这个方法 , 当时主要是考虑到不同用户的睡眠环境、个体差异太大 , 且对设备的摆放位置要求较高 , 最终会导致训练难度加大 。 由于 Sleep as Android 并非开源软件 , 因此它这个声纳运用的有效性不太好验证 。
通过系统 API 监测睡眠行为
上面讲到的方案是开发者自己采集传感器的原始数据来进行睡眠分析 , 但随着这一需求的增多和相关训练模型的成熟 , Google 开始把睡眠监测整合成 API 加入到 GMS(谷歌移动服务)的服务框架中 。
这些 API 相当于对各种传感器原始数据采集的方法做了二次封装 , 并且还内置了监测识别的模型 , 开发者无需再关心睡眠监测应该如何去采集数据、如何去训练了 。 Google 现在帮你做好了 , 你只需要调用 API , 简单地处理结果事件即可 。
从Sleep API官方文档来看 , 使用方式非常简单:
To get started, do the following:只要设备基于 Android 10 及以上 , 声明并请求行为识别专属权限 , 再调用相应的方法即可获取睡眠事件 , 这些事件都是 GMS 在框架中已经识别分析之后的结果 , 开发者只需要关心自己的产品业务逻辑即可 。
- Target Android 10 (API level 29) or higher.
- Request the ACTIVITY_RECOGNITION permission.
- Register for updates to the user's sleep behavior, including sleep segments and sleep event classification results, by calling requestSleepSegmentUpdates.
【科普 | 从解决方案到底层实现:你的手机是这样进行睡眠监测的】其中最重要且仅有的两个睡眠事件有必要介绍一下: 和。
SleepSegmentEvent 顾名思义就是睡眠片段事件 , 其中包含了用户每一段睡眠的关键信息:
关键方法说明系统检测到用户停止睡眠并苏醒的时间 用户这段睡眠的持续时间(原文档特别提示到based on the device sensor data) 用户开始入睡的时间 事件状态 , 有数据缺失、无法检测和成功三种 , 第一种一般是数据采集不足导致的 , 第二种是识别结果置信度不够导致
而 SleepClassifyEvent , 便是睡眠识别分类事件 , 包含了睡眠识别的置信度和传感器数据等信息 , 且此事件回调周期是固定间隔10分钟:
关键方法说明0到100 , 值越大置信度越高 , 说明用户当前越可能处于睡眠状态 顺便返回环境亮度值 顺便返回设备位移值 , 即加速度传感器的包装数据 事件发生时的时间戳 , 是一个时刻 , 非连时间段
有了这些方法 , 睡眠类 App 开发的门槛大幅降低 , 大概是一件好事吧 。 当然 , 这就相当于完全信任 Google 的模型 , 且依赖 GMS 框架 , 国内恐怕不好普及 。
不过之前在做竞品调研的时候 , Pixel 机型的效果确实比其他手机好 。 同样的一份测试代码 , 在调用相关 API 时得到的事件数据更多、更连贯 , 这样更利于后续的处理和展示 , 而非寥寥几个事件 , 或者甚至没有;国产某些旗舰机(自带 GMS 框架)虽然也有效果 , 但比起亲儿子手机 , 还是要差一些 。 个人认为导致这个差距的主要原因 , 还是跟系统后台限制和底层框架的修改有关 。
特别声明:本站内容均来自网友提供或互联网,仅供参考,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
