android 震动 代码 android 手机 震动测试
  lEVps08GHMuE 2023年11月30日 50 0


Why ?

智能手机的摇一摇功能早就出现,但是必须掏出手机有大幅度的摇晃动作才能识别触发,那若是做到手机在裤兜里面只需要像敲门一样“咚咚咚”敲击2-3次手机就能触发暂停音乐或者切换歌曲就更方便酷炫了。这里介绍一下如何利用Android手机内的各种sensor检查敲击动作。

Detecting knock event

目前智能手机内都带的并且能用于该idea实现的很容易就想到了加速度传感器以及其衍生的重力感应器,方向传感器等。其实主要就是利用加速度sensor,Z轴方向在敲击时发生的小范围值得变化来检查。但是其值变化范围小,极易受到其它动作影响并且不好过滤。

鉴于此肯定是有必要去google一下是否有机智的前辈已经探索过这个问题了,果然已经有国外的哥们在四年前已经尝试了这个idea。

Geir Turtum , Torgeir Lien 两位国际友人做过这个project并且无私的share在了github。
项目主页 :http://kybdp.github.io/KnockKnock/

他们照例使用了基础的线性加速度传感器但是在此基础上机智的加入了麦克风声音敲击的录入侦测,两个条件同时判定是否发生了敲击动作。
其源码:https://github.com/KybDP/KnockKnock 提供了敲击三次暂停/播放后台音乐,敲击两次下一曲的功能;毕竟是四年前的project,博主在android 5.0机器上测试并不能成功触发音乐切换和暂停等功能,并且对于停止/重新开始敲击检测存在一定的bug。不过其对于敲击次数的检测还是挺准确的,故而博主使用了其侦测算法简单修复了下它的停止、开始检测敲击的逻辑。

博主修复版,侦测到敲击两次或者三次会toast显示检测的结果,并且若是后台有在播放音乐,敲击三次会暂停或者恢复播放音乐的功能,提供了一个暂停侦测敲击事件的button。

android 震动 代码 android 手机 震动测试_android

android 震动 代码 android 手机 震动测试_敲击次数_02

博主改版后的git project:https://github.com/lishushu/KnockDetection.git

最后说几句

稍微看下源码就可以知道其检测算法核心就是起了一个Timer每隔20ms去侦测录音的敲击声音的录入,以及侦听了加速度传感器的Z轴数值波动;还有一个识别敲击的Timer每隔25ms去读取录音和加速度识别的结果,若是辨识出一次敲击然后起一个2-3s的超时去识别这个时间内敲击响应的次数。

总的来说这种方式在手机拿起或者在裤兜判别准确率还是挺可观的,平放于桌面的识别率稍微低一点(毕竟在硬桌面上,敲击引起的Z轴加速度变化还是太小)。缺陷是使用定时任务而且启用了加速度、麦克风两个资源去不间歇的侦测识别,过于消耗系统资源和电量;故而这个idea实现并不是适用于连续侦测,可按需在短时间内启动侦测,敲击侦测完成之后关闭。


【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月30日 0

暂无评论

推荐阅读
lEVps08GHMuE