美文网首页
加速度传感器

加速度传感器

作者: TTTqiu | 来源:发表于2016-05-11 21:56 被阅读143次

    一、加速度传感器的用法


    1. 获取 SensorManager 实例。
    SensorManager senserManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
    
    2. 通过 getDefaultSensor() 得到某种传感器的实例。
    Sensor sensor = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
    
    3. 借助 SensorEventListener 对传感器输出的信号进行监听。
    SensorEventListener listener = new SensorEventListener() {
    
        @Override
        public void onAccuracyChanged(Sensor sensor, int accuracy) {
        }
    
        @Override
        public void onSensorChanged(SensorEvent event) {
        }
    };
    
    • 当传感器的精度发生变化时就会调用 onAccuracyChanged() 方法。
    • 当传感器监测到的数值发生变化时就会调用 **onSensorChanged() **方法。
      **onSensorChanged() **方法中传入了一个 SensorEvent 参数,这个参数里又包含了一个 values 数组,所有传感器输出的信息都是存放在这里的。
    • 此时的** values** 数组中会有三个值,分别代表手机在 X 轴Y 轴和** Z 轴**方向上的加速度信息。
    4. 调用 SensorManager 的 registerListener() 方法来注册SensorEventListener 使其生效。
    senserManager.registerListener(listener, senser, SensorManager.SENSOR_DELAY_NORMAL);
    
    • 第一个参数:SensorEventListener 的实例
    • 第二个参数:Sensor 的实例
    • 第三个参数:传感器输出信息的更新速率。以下更新速率是依次递增。
    • SENSOR_DELAY_UI
    • SENSOR_DELAY_NORMAL
    • **SENSOR_DELAY_GAME **
    • **SENSOR_DELAY_FASTEST **
    5. 最后调用 unregisterListener() 方法将使用的资源释放掉。
    sensorManager.unregisterListener(listener);
    

    二、模仿微信摇一摇


    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) {
            }
        };
    }
    

    相关文章

      网友评论

          本文标题:加速度传感器

          本文链接:https://www.haomeiwen.com/subject/nxvurttx.html