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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

风晴03

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值