android 传感器(二)加速度传感器
- 传感器理解
o1坐标系是以手机左下角为原点,固定在手机上的坐标系。 xyz的值为手机加速度在o1坐标系中的加速度分量,矢量和为手机加速度。
// 获取加速度传感器的三个参数
float x = event.values[0];
float y = event.values[1];
float z = event.values[2];
加速度的大小为:
//向量求模
public double magnitude(float x, float y, float z) {
double magnitude = 0;
magnitude = Math.sqrt(x * x + y * y + z * z);
return magnitude;
}
2.摇一摇
在原有基础上加了一个反向的判断
// 获取传感器管理器
sm = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
// 获取加速度传感器
Sensor acceleromererSensor = sm.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
// 定义传感器事件监听器 摇一摇
SensorEventListener acceleromererListener2 = new SensorEventListener() {
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
//精度发生改变
// 什么也不干
}
// 传感器数据变动事件
@Override
public void onSensorChanged(SensorEvent event) {
long currentTime = System.currentTimeMillis();
//没100毫秒取一次变化
if(currentTime-lastTime<100&&!isIng)
return;
lastTime = currentTime;
// 获取加速度传感器的三个参数
float x = event.values[0];
float y = event.values[1];
float z = event.values[2];
if (last_x == 0.0f && last_y == 0.0f && last_z == 0.0f) {
last_x = x;
last_y = y;
last_z = z;
}
//正在晃动
if (Math.abs(x) > 17f || Math.abs(y) > 17f || Math.abs(z) > 17f) {
//检测相反方向晃动
if (Math.abs(x-last_x) > 34f || Math.abs(y-last_y) > 34f || Math.abs(z-last_z) > 34f) {
//正在摇一摇
tx2.setText("摇一摇");
isIng=true
}else{
last_x = x;
last_y = y;
last_z = z;
}
}
}
};
// 在传感器管理器中注册监听器
sm.registerListener(acceleromererListener2, acceleromererSensor,
SensorManager.SENSOR_DELAY_NORMAL);
Demo下载:gingerbread
相关链接:我的Android开发相关文章