手势体感-翻转算法的实现(原创)
2016-03-09 23:50
260 查看
引子
印度客户的一个需求,希望实现来电时翻转静音的功能。具体如下:1.电话铃声到来时;
2.采取下面动作:
a.手机正面翻到背面<顺时针或者逆时针旋转180度>
b.手机背面翻到正面<顺时针或者逆时针旋转180度>
3.来电静音,或者你喜欢的话,可以换成翻转闹铃静音;
技术点
1.数据来源:ACC传感器(即重力加速度传感器)2.翻转算法:根据翻转动作的三轴原始数据变化观察,找出规律完成算法;
本算法的价值
翻转的识别度 > 95%,欢迎直接复制使用,大家快乐分享代码呗。废话不多说了,直接上Android代码.
翻转算法实现步骤:
1.注册ACC传感器的使用权利,在程序的onResume()或者onCreate()找个地方,实现具体如下代码:SensorManager mSensorManager = (SensorManager) mContext.getSystemService(Context.SENSOR_SERVICE); mSensorManager.registerListener(this, mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER), SensorManager.SENSOR_DELAY_NORMAL);
2. 接下来完成一个好习惯,在程序的onPause()或者onDestory()进行注销ACC传感器的使用,因为如果忘了会导致用户无意和无形中过多损失的电量。步骤如下:
if (mSensorManager != null) { mSensorManager.unregisterListener(mSensorListener);
3.在接下来实现SensorEventListener 接口,类似下面的:
public class xxx implement SensorEventListener {
4.上面步骤完成了,需要重新SensorEventListener 对应onSensorChanged的方法,下面直接贴代码了(本文的核心)
private float curZ; private float preZ; private int count; private SensorManager mSensorManager; private static final int FLIP_MAX = 10; @Override public void onSensorChanged(SensorEvent event) { if (event.sensor.getType() != Sensor.TYPE_ACCELEROMETER){ return; } curZ = event.values[SensorManager.DATA_Z]; if (count++ % FLIP_MAX == 0) { Log.v(this, "Flip->current=" + curZ + " ,preZ = " + preZ); if ((curZ * preZ) < 0 && (Math.abs(curZ - preZ) > FLIP_MAX)) { // 判定翻转动作生效 Log.v(this, "suhuazhi Flip->" + curZ + ",preZ" + preZ); silent(); } } preZ = curZ; count = 1; } }
5.铃声静音的功能代码块
private void silent(){ TelecomManager tm; tm = (TelecomManager).getSystemService. (Context.TELECOM_SERVICE); if (tm != null && tm.isRinging()) { tm .silenceRinger(); } }
结束语
希望上面的手势体感的翻转算法能给你的开发带来帮助!感恩开源,支持开源,以前经常索取,现在我也要分享自己的代码。
相关文章推荐
- git status的时候不再显示本地删除的文件状态
- [CodeForces 332B]Maximum Absurdity[DP]
- 小代码 细心体会 含3对父子编程
- 螺旋矩阵
- 大并发量,大数据量基于SSH应用程序架构有关问题
- 利用nginx搭建RTMP视频点播、直播、HLS服务器
- spring bean生命周期
- Eclipse中使用recyclerview时出现Caused by: java.lang.NoClassDefFoundError: android.support.v7.recyclerview.R$styleable
- Winform退出程序
- 《A Byte of Python》读书笔记
- 优化
- 位运算及技巧
- 【软件工程】开发项目重构的时机和方法
- ABP理论学习之SignalR集成
- 匿名函数与高阶函数的使用
- java二叉树实现、遍历、求深度
- 小代码
- POJ-3687-Labeling Balls-(求最小字典序拓扑序列)逆向建图-拓扑排序
- 幂集合[集合论]
- php 关于时区 date gmdate date_default_timezone_set/get 终极答疑