Android传感器

开发步骤
1、获取SensorManager对象

SensorManager sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);

2、指定传感器

Sensor sensor = sensorManager.getDefaultSensor(Sensor.TYPE_ORIENTATION)

3、注册监听(SensorEventListener)传感器值

 sensorManager.registerListener(this,sensor ,SensorManager.SENSOR_DELAY_GAME) ;

其中第三个参数作用是指定传感器的数据频率,一般有以下几种频率
(1) 最快延迟最小
         SensorManager.SENSOR_DELAY_FASTEST  
(2)适合游戏的频率,一般有实时的应用要求的可用
         SensorManager.SENSOR_DELAY_GAME        
(3)正常频率,对实时性要求不高的可用
         SensorManager.SENSOR_DELAY_NORMAL    
(4) 适合普通用户界面
         SensorManager.SENSOR_DELAY_UI              

常用的传感器

1、 方向传感器

  • 第一个角度,手机顶部朝向与正北方向的夹角,当手机绕着Z轴转动其值会发生改变,
  • 第二个角度,表示手机顶部和尾部翘起的角度,当手机绕着X轴转动时该值发生改变,其范围(-180 — 180)
  • 第三个角度,表示受手机左侧或右侧翘起角度,范围值-90到90.

2、 陀螺仪传感器
3、 磁场传感器
4、 重力传感器
5、 先行传感器
6、 温度传感器
7、 光感传感器
8、 压力传感器

SensorManager sensorManager ;
    private void initSensor() {
        sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
        /*方向传感*/
        sensorManager.registerListener(this,sensorManager.getDefaultSensor(Sensor.TYPE_ORIENTATION),SensorManager.SENSOR_DELAY_GAME) ;
        /*陀螺仪*/
        sensorManager.registerListener(this,sensorManager.getDefaultSensor(Sensor.TYPE_GYROSCOPE),SensorManager.SENSOR_DELAY_GAME) ;
        /*磁场*/
        sensorManager.registerListener(this,sensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD),SensorManager.SENSOR_DELAY_GAME) ;
        /*重力*/
        sensorManager.registerListener(this,sensorManager.getDefaultSensor(Sensor.TYPE_GRAVITY),SensorManager.SENSOR_DELAY_GAME) ;
        /*线性加速度*/
        sensorManager.registerListener(this,sensorManager.getDefaultSensor(Sensor.TYPE_LINEAR_ACCELERATION),SensorManager.SENSOR_DELAY_GAME) ;
        /*温度*/
        sensorManager.registerListener(this,sensorManager.getDefaultSensor(Sensor.TYPE_AMBIENT_TEMPERATURE),SensorManager.SENSOR_DELAY_GAME) ;
        /*光感*/
        sensorManager.registerListener(this,sensorManager.getDefaultSensor(Sensor.TYPE_LIGHT),SensorManager.SENSOR_DELAY_GAME) ;
        /*压力*/
        sensorManager.registerListener(this,sensorManager.getDefaultSensor(Sensor.TYPE_PRESSURE),SensorManager.SENSOR_DELAY_GAME) ;
    }


    @Override
    protected void onResume() {
        super.onResume();
    }


    /**
     * 实时输出传感器数据
     *
     * @param event
     */
    @Override
    public void onSensorChanged(SensorEvent event) {
        /*传感器的值*/
        float[] val = event.values;
        StringBuffer stringBuffer ;
        switch (event.sensor.getType()){
            /*方向*/
            case Sensor.TYPE_ORIENTATION :
                stringBuffer = new StringBuffer();
                stringBuffer.append("\n");
                stringBuffer.append("val[0] z轴绕过的角度:"+val[0]+"\n");
                stringBuffer.append("val[1] x轴绕过的角度:"+val[1]+"\n");
                stringBuffer.append("val[2] y轴绕过的角度:"+val[2]+"\n");
                Log.v("===============","方向传感="+stringBuffer.toString());
                break;
                /*陀螺仪*/
            case Sensor.TYPE_GYROSCOPE :
                stringBuffer = new StringBuffer();

                stringBuffer.append("\n");
                stringBuffer.append("val[0] x轴绕过的角速度:"+val[0]+"\n");
                stringBuffer.append("val[1] y轴绕过的角速度:"+val[1]+"\n");
                stringBuffer.append("val[2] z轴绕过的角速度:"+val[2]+"\n");
                Log.v("===============","陀螺仪="+stringBuffer.toString());
                break;

            /*磁场*/
            case Sensor.TYPE_MAGNETIC_FIELD :
                stringBuffer = new StringBuffer();

                stringBuffer.append("\n");
                stringBuffer.append("val[0] x磁场度:"+val[0]+"\n");
                stringBuffer.append("val[1] y磁场度:"+val[1]+"\n");
                stringBuffer.append("val[2] z磁场度:"+val[2]+"\n");
                Log.v("===============","磁场="+stringBuffer.toString());
                break;

            /*重力*/
            case Sensor.TYPE_GRAVITY :
                stringBuffer = new StringBuffer();

                stringBuffer.append("\n");
                stringBuffer.append("val[0] x 方向的重力:"+val[0]+"\n");
                stringBuffer.append("val[1] y 方向的重力:"+val[1]+"\n");
                stringBuffer.append("val[2] z 方向的重力:"+val[2]+"\n");
                Log.v("===============","重力="+stringBuffer.toString());
                break;

            /*线性加速度*/
            case Sensor.TYPE_LINEAR_ACCELERATION :
                stringBuffer = new StringBuffer();
                stringBuffer.append("\n");
                stringBuffer.append("val[0] x 线性加速度:"+val[0]+"\n");
                stringBuffer.append("val[1] y 线性加速度:"+val[1]+"\n");
                stringBuffer.append("val[2] z 线性加速度:"+val[2]+"\n");
                Log.v("===============","线性加速度="+stringBuffer.toString());
                break;
            /*温度*/
            case Sensor.TYPE_AMBIENT_TEMPERATURE :
                stringBuffer = new StringBuffer();
                stringBuffer.append("\n");
                stringBuffer.append("val[0] 当前温度:"+val[0]+"\n");
                Log.v("===============","当前温度="+stringBuffer.toString());
                break;

            /*光感*/
            case Sensor.TYPE_LIGHT :
                stringBuffer = new StringBuffer();
                stringBuffer.append("\n");
                stringBuffer.append("val[0] 当前光感:"+val[0]+"\n");
                Log.v("========当前光感=======","当前光感="+stringBuffer.toString());
                break;
            /*压力*/
            case Sensor.TYPE_PRESSURE :
                stringBuffer = new StringBuffer();
                stringBuffer.append("\n");
                stringBuffer.append("val[0] 当前压力:"+val[0]+"\n");
                Log.v("===============","当前压力="+stringBuffer.toString());
                break;
        }
    }



    /**
     * 传感器精度发生改变时调用
     *
     * @param sensor
     * @param accuracy
     */
    @Override
    public void onAccuracyChanged(Sensor sensor, int accuracy) {



    }


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

将哥哥

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

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

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

打赏作者

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

抵扣说明:

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

余额充值