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

android 传感器(二)加速度传感器

  1. 传感器理解

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开发相关文章

你可能感兴趣的:(android传感器)