Android模仿iOS Messages拿起手机靠近耳朵自动录音

Android模仿iOS Messages拿起手机靠近耳朵自动录音

按照既定的开发进度,原本应该开始整合录音功能到神马笔记中了。

无意之间发现iOS Messages还有一个非常非常方便的功能,拿起手机靠近耳朵会自动启动录音功能。

这真是一个超级实用的功能,想象一下在神马笔记中的使用场景。

阳关明媚的午后,看着蒋勋先生的《蒋勋说宋词》,手机上打开神马笔记做读书笔记,读到辛弃疾的“杯汝来前,老子今朝点检形骸,……”,随手拿起手机,自动开始录音就将朗读的内容记录下来。

一、目标

实现神马笔记对话笔记拿起手机靠近耳朵自动录音。

二、功能分析

截图 说明
没有启动录音时,拿起手机靠近耳朵。
启动录音功能后,拿起手机靠近耳朵。

三、参考文章

文章 说明
android实现 拿起耳边拨打电话 提供了很好的实现思路
android模仿打电话期间手机靠近息屏,远离亮屏 提供了非常方便的自动息屏的实现方式
android 使用距离传感器实现贴近息屏离开亮屏 提供了距离传感器的使用参考

四、开源项目

项目 描述
thaleslima / accelerometer-detect-movement [Android] Detect Movement Accurately using Accelerometer in Android
tingtingTT / AndroidDetectMovingPhone An Android mobile app that will set alert on the screen if anyone has moved the phone
tbouron / ShakeDetector This library provides a easy way to detect a shake movement using the build-in accelerometer and fire a callback on the UI thread every times it happens.
brandonyan99 / MovementDetector App to detect if phone moved
avani1004 / PhoneMovedOrNot
mesutgolcuk / AccelerometerTestApp Finds out how many seconds phone moved with accelemoter

五、实现效果

参考了以上文章和开源项目,并且对iOS Messages进行了测试。

确定已经找到了一种比较好的实现方式。

必须结合2个传感器——加速度传感器和距离传感器。

前者用于判断用户是否移动手机,后者用于判断是否靠近耳朵。

只使用距离传感器,导致一个问题,手机没有移动,用手遮挡传感器会触发功能。

因此,必须结合加速度传感器检测手机有移动,和距离传感器判断手机靠近耳朵。

另外还要考量时间的因素,移动的时间太短,用户可能只是移动手机,然后被遮挡,不应该触发功能。

传感器 用途 目标值
TYPE_ACCELEROMETER 检测手机是否移动,以及移动的时间 true or false
duration
TYPE_PROXIMITY 检测手机是否靠近耳朵 true or false

同时,需要增加提示音。

靠近耳朵开始录音时,播放开始提示音,告知用户可以开始录音了。

远离耳朵停止录音时,播放停止提示音,告知用户录音已经结束。

完整的功能开发以及对参数进行调试,预计需要2天的开发时间。

最后整合到神马笔记,以及提交测试,大概需要1天的开发时间。

因此,总共需要至少3天的开发时间。

鉴于开发进度已经严重超期,按照正常的开发进度,应该在6月18日就发布神马笔记的2.7.0版本。

今天已经6月23日,严重超过既定的发布时间。

因此将该功能推迟到未来作为一个独立版本发布。

六、接下来

开始整合录音功能到神马笔记中。

七、Finally

无上甚深微妙法, 百千万劫难遭遇, 我今见闻得受持, 愿解如来真实义。