您的位置:首页 > 移动开发 > Android开发

Android之传感器(二)加速度传感器

2016-01-29 11:26 330 查看

Android之传感器(二)加速度传感器

一,简介

Android 中的加速度传感器则是提供了一种机制,

使得我们能够在应用程序中获取到手机当前的加速度信息, 合理利用这些信息就可以开发出

一些比较好玩的功能。

二,加速度传感器的用法

正如前面所说的一样,每种传感器的用法都是大同小异的,在上一节中你已经掌握了光

照传感器的用法,因此,重复的部分我们就不再介绍了,这里在使用加速度传感器的时候只

需要注意两点。第一,获取 Sensor 实例的时候要指定一个加速度传感器的常量,如下所示:

Sensor sensor = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);

第二,加速度传感器输出的信息同样也是存放在 SensorEvent 的 values 数组中的,只不

过此时的 values 数组中会有三个值, 分别代表手机在 X轴、 Y 轴和 Z 轴方向上的加速度信息。

X 轴、Y轴、Z 轴在空间坐标系上的含义如图所示。



需要注意的是,由于地心引力的存在,你的手机无论在世界上任何角落都会有一个重力

加速度,这个加速度的值大约是 9.8m/s 2 。当手机平放的时候,这个加速度是作用在 Z 轴上

的,当手机竖立起来的时候,这个加速度是作用在 Y 轴上的,当手机横立起来的时候,这个

加速度是作用在 X 轴上的。

三,实例_模仿微信摇一摇

接下来我们尝试利用加速度传感器来模仿一下微信的摇一摇功能。 其实主体逻辑也非常

简单,只需要检测手机在 X 轴、Y 轴和 Z 轴上的加速度,当达到了预定值的时候就可以认为

用户摇动了手机,从而触发摇一摇的逻辑。那么现在问题在于,这个预定值应该设定为多少

呢?由于重力加速度的存在,即使手机在静止的情况下,某一个轴上的加速度也有可能达到

9.8m/s 2 ,因此这个预定值必定是要大于 9.8m/s 2 的,这里我们就设定为 15m/s 2 吧。

新建一个 AccelerometerSensorTest项目,然后修改 MainActivity 中的代码,如下所示:

public class MainActivity extends Activity {
private SensorManager sensorManager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
sensorManager = (SensorManager) getSystemService
(Context.SENSOR_SERVICE);
Sensor sensor = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
sensorManager.registerListener(listener, sensor, SensorManager.
SENSOR_DELAY_NORMAL);
}
@Override
protected void onDestroy() {
super.onDestroy();
if (sensorManager != null) {
sensorManager.unregisterListener(listener);
}
}
private SensorEventListener listener = new SensorEventListener() {
@Override
public void onSensorChanged(SensorEvent event) {
// 加速度可能会是负值,所以要取它们的绝对值
float xValue = Math.abs(event.values[0]);
float yValue = Math.abs(event.values[1]);
float zValue = Math.abs(event.values[2]);
if (xValue > 15 || yValue > 15 || zValue > 15) {
// 认为用户摇动了手机,触发摇一摇逻辑
Toast.makeText(MainActivity.this, "摇一摇",
Toast.LENGTH_SHORT).show();
}
}
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
}
};
}

可以看到, 这个例子还是非常简单的, 我们在 onSensorChanged()方法中分别获取到了 X

轴、Y 轴和 Z 轴方向上的加速度值,并且由于加速度有可能是负值,所以这里又对获取到的

数据进行了绝对值处理。接下来进行了一个简单的判断,如果手机在 X 轴或 Y 轴或 Z 轴方

向上的加速度值大于 15m/s 2 ,就认为用户摇动了手机,从而触发摇一摇的逻辑。当然,这里

简单起见,我们只是弹出了一个 Toast 而已。

现在运行一下程序,并且摇动你的手机,就会看到有 Toast 提示出来了。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: