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 提示出来了。
相关文章推荐
- Android监听手机电话状态与发送邮件通知来电号码的方法(基于PhoneStateListene实现)
- android 怎么判断自定义的控件的显示状态(隐藏、显示)
- ubuntu 上安装kivy
- AndroidStudio中使用开源框架android-gif-drawable
- Android之传感器(一)光照传感器
- android项目中出现的错误
- 详解Android自定义控件属性TypedArray以及attrs
- android实现仿QQ登陆界面的多账号保存
- 4000 android 有确认和取消按钮的 AlertDialog 弹出的使用说明
- Android Studio导入Fresco
- Android实现计时与倒计时(限时抢购)的几种方法
- Android开发常用的adb命令整理
- Android检测手机中存储卡及剩余空间大小的方法(基于Environment,StatFs及DecimalFormat)
- Android SQLiteDatabase 数据库存储
- Android ImageView(scaleType属性)图片按比例缩放
- Android 字符串资源
- Android连续点两下Back退出程序
- android-Planning for Multiple Touchscreen Sizes,Providing Descendant and Lateral Navigation
- Android Fragment生命周期深入探究
- RecyclerView完全解析