Android手机屏幕敲击解锁功能代码手机屏幕敲击解锁功能代码
Android手机支持敲击屏幕解锁,敲击屏幕解锁是一项很实用的功能,本文以android平台为例使用java代码实现
Android手机屏幕敲击解锁功能,非常不错,具有参考借鉴价值,感兴趣的朋友一起学习吧
1.前言前言
现在市面上有不少Android手机支持敲击屏幕解锁,敲击屏幕解锁是一项很实用的功能,但一来只支持敲击屏幕,二来只
能用于解锁或锁屏,再者我们应用层的开发者切不进去,完全无法玩起来。开发者,开发者,我们既然身为开发者何不搞点大
新闻,那么这次我来教教各位如何用代码来实现手机的敲击识别,听起来是不是很有趣,有些跃跃欲试呢。事实上在ios上已
经有实现这个功能的应用:Knock,一款敲击来解锁Mac电脑的应用,售价4.99美元,约为33人民币。有时候真想去做ios开
发,可以开心的为自己的应用定价,愉悦的挣外快。言归正传,既然ios可以实现,那我们Android自然不能落伍,现在我就带
领大家来用代码实现手机的敲击识别吧。
本文以Java为示例语言,以Android为示例平台。
2.功能实现功能实现
2.1.实现思路实现思路
说到敲击识别,你们会考虑使用什么来实现呢,传感器?对,没错,作为手机手势姿态识别的唯一途径,我们自然需要使
用传感器来实现对敲击的识别,但Android传感器种类繁多,我们应该选择哪一个呢?
在Android2.3的时代,Android系统就已经定义了11个传感器,到了现在Android6.0的时代,系统定义的传感器数目已经
达到26个,这么多传感器我们到底用哪一个呢,事实上我们只需要考虑2.3时代提供的那11个传感器即可,因为一方面后期加
入的传感器部分如心跳传感器等需要硬件支持,导致很多手机无法支持此类传感器,另一方面2.3时代的11个传感器功能已经
相当强大,可以支持绝大多数手势姿态的识别,那么现在我来列举一下上述11个传感器:
SENSOR_TYPE_ACCELEROMETER 加速度
SENSOR_TYPE_MAGNETIC_FIELD 磁力
SENSOR_TYPE_ORIENTATION 方向
SENSOR_TYPE_GYROSCOPE 陀螺仪
SENSOR_TYPE_LIGHT 光线感应
SENSOR_TYPE_PRESSURE 压力
SENSOR_TYPE_TEMPERATURE 温度
SENSOR_TYPE_PROXIMITY 接近
SENSOR_TYPE_GRAVITY 重力
SENSOR_TYPE_LINEAR_ACCELERATION 线性加速度
SENSOR_TYPE_ROTATION_VECTOR 旋转矢量
关于这11个传感器的详细描述,各位可以去//www.jb51.net/article/87940.htm查看,事实上我一直怀疑LG G3的敲击解锁
与光线传感器或接近传感器有关,因为我用手指悬浮在LG G3的头部正上方时一直无法敲击解锁,移开后恢复正常,而敲击锁
屏应该只和触摸屏相关,因为无论我怎么遮挡传感器,敲击锁屏的功能完全不受影响。
言归正传,对这11个传感器有所了解后,我们需要选择哪个或哪些传感器来实现功能呢,我们来模拟一下手机敲击的情
况,将手机平放在桌面上,手指敲击手机的时候,手指给了手机一个力,同时桌面给予手机一个反作用力,考虑桌面不形变的
情况下,手机受力平衡加速度为0,但这时手机的加速度传感器数据是否会有变化呢,答案是会的,手机加速度传感器的数据
会有一段短暂但明显的变化,为什么呢,手机受力平衡加速度为0是因为它是一个整体,但内部构件还是会受到相互之间复杂
的力的左右,并非受力的同时就达到受力平衡的,其实换个思路。用一个和手机形状相似内部光滑的容器,容器里面放几个玻
璃球,敲击几下,容器不会移动,但玻璃球是不是移动了呢。虽然手机内部的构件远比玻璃球稳定,但也得遵循基本法,老老
实实接受力的作用。
上述场景是平放于桌面的场景,实际生活的场景往往更加复杂多样,但无论处于哪种场景,毫无疑问对手机的敲击操作都
应该导致加速度传感器传出数据的明显变化,那么我们现在就明白了应该选择什么传感器作为我们敲击识别的工具了吧,但加
速度相关的传感器有两个,加速度传感器和线性加速度传感器,我们应该选择哪一个呢,加速度传感器提供的数据是重力影响
下的手机加速度,线性加速传感器提供的数据是排除重力影响的手机加速度,可以直观的反映排除重力后手机的受力情况,很
合适用以敲击识别,那我们是否就应该选择线性加速度传感器呢,恰恰相反,我们要选择加速度传感器,Android提供的线性
加速度传感器基于软件的,不同平台对于线性加速传感器的处理未必相同,事实上,在敲击三星S4,LG G3中一款机型的背
面,就出现线性加速度传感器传出的数据没有较大变化的情况,保险起见,我们还是选用基于硬件的加速度传感器更合适一
些。顺便吐槽一句,当时看到压力传感器的时候,我还以为监测作用于手机的压力的传感器,那无疑是很适合用于识别敲击,
后面看到描述才知道是监测压强的。
如上所说,对手机的敲击操作会导致加速度传感器传出数据的明显变化,故而本次功能实现中,判断是否有敲击操作的方
法是检测手机线性加速度相比正常情况是否有明显变化。在功能实现过程中为排除重力的影响,需要对加速度传感器的数据进
行处理将其转化为线性加速度,因为转化为线性加速度是一个需要校准的过程,所以需要先投入一定数目的数据用于校准以获
得更精确的线性加速度,同时考虑到现实生活存在可能导致误识别的场景,比如摇动手机会带给手机一个较长时间且明显的线
性加速度变化,所以提出稳态的概念,将手机处于相对稳定,没有长时间出现明显线性加速变化的状况视为稳态,在稳态的情
况下才会进行对敲击的识别,另外此次敲击识别考虑到对手机边框的敲击使用可能性过低,因此仅考虑识别对手机屏幕或背面
的敲击,这样在识别的过程中可忽略X,Y轴的数据,仅考虑Z轴的线性加速度。
2.2.功能简介功能简介
评论0
最新资源