最近突然有个想法,就是用安卓的加速度传感器来监测手机的移动状态,从而让手机完成我们想要的移动轨迹,完成后解锁某个功能啥的。就比如我想让用户把手机当成是香(祭拜用的高香),然后模仿祭拜的动作,拜三下。例如下面这图,把香换成手机。
熊猫烧香
祭拜的动作,首先是把手机倾斜大概30°,然后慢慢提高手机角度,最终让手机竖着起来,然后又慢慢的把手机摆回30°的样子。就这完成了一次的祭拜动作。那如何用手机来监测,用户是不是按照这样的动作来摆动了呢?那就用上手机的加速度传感器。
加速度传感器
加速度方向这里的加速度特指重力加速度,所以在静止时重力传感器的返回值与加速度传感器值相同。
地表上静止物体的重力加速度约为9.8 m/s^2。所以,当我们把手机正面朝上放在桌子上的时候,z的值应该是接近于9.8,而x和y的值则是接近0。
也可以这样理解:
1、当x轴的值接近重力加速度时,说明设备的左边朝下。
2、当x轴的值接近负的g值时,说明设备的右边朝下。
3、当y轴的值接近g值时,说明设备的下边超下(与上图一样)。
4、当y轴的值接近负的g值时,说明设备的上边朝下(倒置)。
5、当z轴的值接近g值时,说明设备的屏幕朝上。
6、当z轴的值接近负的g值时,说明设备屏幕朝下。
明白原理后,我们看代码,怎么使用加速度传感器:
第一步是注册:
mSensorManager = ((SensorManager) getSystemService(SENSOR_SERVICE));
if (mSensorManager != null) {
//获取加速度传感器
Sensor mAccelerometerSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
if (mAccelerometerSensor != null) {
mSensorManager.registerListener(sensorEven, mAccelerometerSensor, SensorManager.SENSOR_DELAY_UI);
}
}
第二部是设置监听:
float a = 3;//一开始倾斜手机30°,z轴的值大概是3
int times = 0;//祭拜的次数
boolean isStart = true;//是否已恢复过初始状态
boolean isFinish = false;//是否祭拜完成
private SensorEventListener sensorEven = new SensorEventListener() {
@Override
public void onSensorChanged(SensorEvent event) {
int type = event.sensor.getType();
if (type == Sensor.TYPE_ACCELEROMETER) {
//获取三个方向值
float[] values = event.values;
float x = values[0];
float y = values[1];
float z = values[2];
Log.i("===", x + " " + y + " " + z);
if (!isFinish) {
if (y > a) {
a = y;
} else {
a = 3;
}
if (y < 3) {
isStart = true;
}
if (a > 9 && isStart) {
isStart = false;
a = 3;
times++;
Log.i("=====", times + "次拜");
}
if (times == 3) {
isFinish = true;
Log.i("=====", "祭拜完成");
}
}
//摇一摇
if ((Math.abs(x) > 17 || Math.abs(y) > 17 || Math.abs(z) > 17) && !isOpen) {
isOpen = true;
//做摇一摇后的操作
}
}
}
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
}
};
最后别忘了销毁:
@Override
protected void onDestroy() {
super.onDestroy();
if (mSensorManager != null) {
mSensorManager.unregisterListener(sensorEven);
}
}
经过上面的判断,应该是可以监测到手机祭拜的动作了。那除了这些,还有很多好玩的,例如摇一摇啊,看谁摇晃的次数多啊,都是看你的创意了。之前还用红外传感器(就是听筒旁边的传感器)来监测,首先手机上显示是牌面朝下的扑克牌,当我们用手掌在听筒经过,就做翻牌的操作,这样就好像是一个魔术啦。APP下载地址:http://app.mi.com/details?id=com.game.magic&ref=search
几年前刚学安卓的时候做的啦,主要是创意效果吧。
网友评论