传感器

传感器

手机的传感器的调用都是大同小异的,可谓是一通百通,步骤如下:

1)获得传感器管理器:

SensorManager manager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);

有了这个传感器的实例就可以获得各种传感器的实例了。
2)获得传感器的实例:

 Sensor sensor = manager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);//获得的是加速度传感器

3)对传感器的信号进行监听:

private SensorEventListener listener = new SensorEventListener() {
        @Override
        public void onSensorChanged(SensorEvent event) {


           }

        }

        @Override
        public void onAccuracyChanged(Sensor sensor, int accuracy) {

        }
    };

在监视器中有两个方法:onSensorChanged(),onAccuracyChanged();onSensorChanged()方法是在传感器的测量数值发生变化的时候调用,onAccuracyChanged()是传感器的精度发生变化的时候调用。event的value数组中就存放着测量的数据。
4)在onCreat()中注册传感器:manager.registerListener(listener,sensor,SensorManager.SENSOR_DELAY_NORMAL);
第一个参数为:SensorEventListener的对象,第二个参数为:传感器的实例,第三个参数为:传感器的数据更新数据的速率。
5)在onDestroy()中注销注册:manager.unregisterListener(listener);

具体传感器的说明

具体的步骤就是这样,但是具体的传感器有不同的特质,尤其是测得的数值在values数组中是如何摆列的:

1)光照传感器:光照强度在event.values[0]
2)加速度传感器(Sensor.TYPE_ACCELEROMETER):values数组的值分别代表 x,y,Z的加速度。
3)手机获得旋转的角度和方向是通过加速度传感器与地磁传感器共同计算的。
代码如下:

private SensorEventListener listener = new SensorEventListener() {
        float [] accelerometerValues = new float[3];
        float [] magneticValues = new float[3];
        @Override
        public void onSensorChanged(SensorEvent event) {

            if(event.sensor.getType()==Sensor.TYPE_ACCELEROMETER){
                accelerometerValues = event.values.clone();

            }else if(event.sensor.getType()==Sensor.TYPE_MAGNETIC_FIELD){
                magneticValues = event.values.clone();


            }
            float [] R = new float[9];
            float [] values = new float[3];
             SensorManager.getRotationMatrix(R,null,accelerometerValues,magneticValues);//对R数组赋值,
            SensorManager.getOrientation(R,values);//对values进行赋值。
            //values数组中的值分别是Z,X,Y轴的旋转弧度
            float rotateDegress = (float) -Math.toDegrees(values[0]);
            if(Math.abs(rotateDegress - lastRotateDegress)>4){
//                RotateAnimation animation = new RotateAnimation(lastRotateDegress,rotateDegress, Animation.RELATIVE_TO_SELF,0.5f,Animation.RELATIVE_TO_SELF,0.5f);
//                animation.setFillAfter(true);
//                compass.startAnimation(animation);
//                lastRotateDegress=rotateDegress;
                compass.setDegress(rotateDegress );



            }
        }

        @Override
        public void onAccuracyChanged(Sensor sensor, int accuracy) {

        }
    };
注意;Math.toDegrees(values[0]);//将弧度转化为度。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值