博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
进阶篇-安卓系统:4.安卓手机动作传感器
阅读量:5248 次
发布时间:2019-06-14

本文共 3775 字,大约阅读时间需要 12 分钟。

      动作传感器对于监测设备的移动非常有用,例如:倾斜、震动、旋转和摆动都属于动作传感器的监测范围。设备的移动通常是对用户输入的直接反应。

      所有动作传感器都会返回三个浮点数的值,对于不同的传感器,这三个值的意义不同。例如,对于加速度传感器,会返回三个坐标轴的加速数据。对于陀螺仪传感器,会返回三个坐标周的旋转角速度。

动作传感器的使用与数据返回:加速度传感器

如果单纯的使用加速度传感器传回的数据,会发现Z轴的的加速度是9.8多。所以看来安卓是把静止的手机竖直加速度默认为重力加速度,并且XY轴的数据也不是很准确。这并不是我们要的效果。所以需要借助重力传感器的数据来调整加速的的传感器,使其的数据更加精确。

import android.hardware.Sensor;import android.hardware.SensorEvent;import android.hardware.SensorEventListener;import android.hardware.SensorManager;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import java.util.List;public class MainActivity extends AppCompatActivity implements SensorEventListener{    private SensorManager mSensorManager;    private float[] gravity = new float[3];    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        mSensorManager = (SensorManager)getSystemService(SENSOR_SERVICE);    }    @Override    public void onSensorChanged(SensorEvent sensorEvent) {  //this method will be called when the sensor accuracy changed        switch (sensorEvent.sensor.getType()){            case Sensor.TYPE_ACCELEROMETER:                final float alpha = (float) 0.8;                gravity[0] = alpha * gravity[0] + (1 - alpha) * sensorEvent.values[0];                gravity[1] = alpha * gravity[1] + (1 - alpha) * sensorEvent.values[1];                gravity[2] = alpha * gravity[2] + (1 - alpha) * sensorEvent.values[2];                String data = "Acceleration:\n"+"X:"+(sensorEvent.values[0] - gravity[0])+"\n"+"Y:"+(sensorEvent.values[1] - gravity[1])+"\n"+"Z:"+(sensorEvent.values[2] - gravity[2])+"\n";                System.out.println(data);                //System.out.println(sensorEvent.values[2] - gravity[2]);                break;            case Sensor.TYPE_GRAVITY:                gravity[0]=sensorEvent.values[0];                gravity[1]=sensorEvent.values[1];                gravity[2]=sensorEvent.values[2];                break;        }    }    @Override    public void onAccuracyChanged(Sensor sensor, int i) {
//this method will be called when the sensor data changed } @Override protected void onResume() { super.onResume(); mSensorManager.registerListener(this,mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),SensorManager.SENSOR_DELAY_UI); mSensorManager.registerListener(this,mSensorManager.getDefaultSensor(Sensor.TYPE_GRAVITY),SensorManager.SENSOR_DELAY_FASTEST); } @Override protected void onPause() { super.onPause(); mSensorManager.unregisterListener(this); }}

我们在onResume方法中注册传感器。在onPause方法中解除注册传感器。

视频里面并没有讲为什么这么处理数据能减小误差。我看了半天也没有看出来——!所以这个笔记就记下来这个减小误差的方法吧。

输出结果:

07-15 20:49:12.663 28389-28389/bhu.com.myapplication I/System.out: Acceleration:07-15 20:49:12.673 28389-28389/bhu.com.myapplication I/System.out: X:0.01028454307-15 20:49:12.683 28389-28389/bhu.com.myapplication I/System.out: Y:7.79517E-407-15 20:49:12.683 28389-28389/bhu.com.myapplication I/System.out: Z:0.010925293 07-15 20:49:12.723 28389-28389/bhu.com.myapplication I/System.out: Acceleration:07-15 20:49:12.733 28389-28389/bhu.com.myapplication I/System.out: X:-0.1063993507-15 20:49:12.733 28389-28389/bhu.com.myapplication I/System.out: Y:0.01779899407-15 20:49:12.733 28389-28389/bhu.com.myapplication I/System.out: Z:0.018583298 07-15 20:49:12.793 28389-28389/bhu.com.myapplication I/System.out: Acceleration:07-15 20:49:12.793 28389-28389/bhu.com.myapplication I/System.out: X:0.0485320107-15 20:49:12.793 28389-28389/bhu.com.myapplication I/System.out: Y:-0.0327197707-15 20:49:12.793 28389-28389/bhu.com.myapplication I/System.out: Z:0.04224682

看来这个加速度传感器还是很敏感的。微小的震动也能精确的测量出来。

转载于:https://www.cnblogs.com/androidNot/p/5674752.html

你可能感兴趣的文章
亡灵序曲-The Dawn
查看>>
Redmine
查看>>
帧的最小长度 CSMA/CD
查看>>
xib文件加载后设置frame无效问题
查看>>
编程算法 - 左旋转字符串 代码(C)
查看>>
IOS解析XML
查看>>
Python3多线程爬取meizitu的图片
查看>>
树状数组及其他特别简单的扩展
查看>>
zookeeper适用场景:分布式锁实现
查看>>
110104_LC-Display(液晶显示屏)
查看>>
httpd_Vhosts文件的配置
查看>>
php学习笔记
查看>>
普通求素数和线性筛素数
查看>>
PHP截取中英文混合字符
查看>>
【洛谷P1816 忠诚】线段树
查看>>
电子眼抓拍大解密
查看>>
poj 1331 Multiply
查看>>
tomcat7的数据库连接池tomcatjdbc的25个优势
查看>>
Html 小插件5 百度搜索代码2
查看>>
P1107 最大整数
查看>>