安卓系统传感器的使用

传感器的使用
传感器(英文名称:sensor)是一种检测装置,能感受到被测量的信息,并能将感受到的信息,按一定规律变换成为电信号或其他所需形式的信息输出

#define SENSOR_TYPE_ACCELEROMETER                   1 //加速度
#define SENSOR_TYPE_MAGNETIC_FIELD                  2 //磁力
#define SENSOR_TYPE_ORIENTATION                     3 //方向
#define SENSOR_TYPE_GYROSCOPE                       4 //陀螺仪
#define SENSOR_TYPE_LIGHT                           5 //光线感应
#define SENSOR_TYPE_PRESSURE                        6 //压力
#define SENSOR_TYPE_TEMPERATURE                     7 //温度 
#define SENSOR_TYPE_PROXIMITY                       8 //接近
#define SENSOR_TYPE_GRAVITY                         9 //重力
#define SENSOR_TYPE_LINEAR_ACCELERATION             10//线性加速度

陀螺仪又叫角速度传感器,是不同于加速度计(G-sensor)的,他的测量物理量是偏转、倾斜时的转动角速度。在手机上,仅用加速度计没办法测量或重构出完整的3D动作,测不到转动的动作的,G-sensor只能检测轴向的线性动作。但陀螺仪则可以对转动、偏转的动作做很好的测量,这样就可以精确分析判断出使用者的实际动作。而后根据动作,可以对手机做相应的操作

代码

//1. 获取传感器管理器SensorManager
sm = (SensorManager) getSystemService(SENSOR_SERVICE);

//2. 获取某个传感器的引用,注册监听
Sensor sensor = sm.getDefaultSensor(Sensor.TYPE_LIGHT);
listener = new MyListnener();
sm.registerListener(listener, sensor, SensorManager.SENSOR_DELAY_NORMAL);

//3.在监听器的回调事件中进行处理
private class MyListnener implements SensorEventListener{
    //当传感器数据变化的时候调用的方法
    @Override
    public void onSensorChanged(SensorEvent event) {
        float light = event.values[0];
        System.out.println("光线强度:"+light);
    }
    //当传感器精度发生变化的时候调用的方法
    @Override
    public void onAccuracyChanged(Sensor sensor, int accuracy) {

    }
}

光传感器

public class MainActivity extends Activity {
    SensorManager sm ;
    private MyListnener listener;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //获取系统底层服务                      //传感器
        sm = (SensorManager) getSystemService(SENSOR_SERVICE);
        //得到光传感器                获取默认的传感器            光传感器
        Sensor sensor = sm.getDefaultSensor(Sensor.TYPE_LIGHT);

        //创建监听器
        listener = new MyListnener();
        //给传感器设定一个监听器
        /*
         * 1.监听器
         * */           //                                      一秒钟大约采样多少次
        sm.registerListener(listener, sensor, SensorManager.SENSOR_DELAY_NORMAL);
    }
    //定义一个监听器 
    private class MyListnener implements SensorEventListener{
        //当传感器数据变化的调用的方法
        @Override//                     传感器的事件
        public void onSensorChanged(SensorEvent event) {
            //设置光传感器的光线强弱
            float light = event.values[0]; // values 传感器的值   代表光线的强弱
            System.out.println("光线强度:"+light);
        }
        //当传感器精度发生变化的时候调用的方法
        @Override  
        public void onAccuracyChanged(Sensor sensor, int accuracy) {

        }
    }
    @Override
    protected void onDestroy() {
        //取消监听器
        sm.unregisterListener(listener);
        listener = null; //将监听器置为null  ,关闭传感器
        super.onDestroy();
    }
}

方向传感器_指南针


public class MainActivity extends Activity {
    SensorManager sm ;
    private MyListnener listener;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //获取系统的传感想器
        sm = (SensorManager) getSystemService(SENSOR_SERVICE);
        //得到方向传感器
        Sensor sensor = sm.getDefaultSensor(3);
        listener = new MyListnener();
        sm.registerListener(listener, sensor, SensorManager.SENSOR_DELAY_NORMAL);
    }

    private class MyListnener implements SensorEventListener{
        //当传感器数据变化的调用的方法
        @Override
        public void onSensorChanged(SensorEvent event) {//event 当前的事件
            //values[0]: 地磁北极和手机y轴的夹角,  0=北, 90=东, 180=南, 270=西 
            int angle = (int) event.values[0];
            if(angle>0&&angle<90){
                System.out.println("东北");
            }else if (angle>90&&angle<180){
                System.out.println("东南");
            }else if(angle>180&&angle<270){
                System.out.println("西南");
            }else if(angle>270&&angle<360){
                System.out.println("西北");
            }else if(angle==0){
                System.out.println("北");
            }else if(angle==90){
                System.out.println("东");
            }else if(angle==180){
                System.out.println("南");
            }else if(angle==270){
                System.out.println("西");
            }
        }
        //当传感器精度发生变化的时候调用的方法
        @Override
        public void onAccuracyChanged(Sensor sensor, int accuracy) {

        }
    }
    @Override
    protected void onDestroy() {
        sm.unregisterListener(listener);
        listener = null;
        super.onDestroy();
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值