美文网首页
传感器Sensor

传感器Sensor

作者: 勤学奋进小郎君 | 来源:发表于2018-10-16 21:49 被阅读0次

简单地创建一个光传感器

public class MainActivity extends Activity {

    private SensorManager sensormanager;
    private SensorEventListener sensorevent;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        /*
        传感器的创建
        1、先创建传感器管理器,管理所有传感器
        2、传入参数,指定特定传感器
        3、注册
        4、结束,注销传感器
         */
        // 1、获取传感器管理服务对象
        sensormanager = (SensorManager) getSystemService(SENSOR_SERVICE);
        // 2、特定传观器对象获取: 光传感器
        Sensor lightsensor = sensormanager.getDefaultSensor(Sensor.TYPE_LIGHT);
        // 3、注册监听器,来实时的更改操作
        //监听器:精确度更改会立即执行onSensorChanged方法
        sensorevent = new SensorEventListener() {
            @Override
            public void onSensorChanged(SensorEvent event) {
            }

            @Override
            public void onAccuracyChanged(Sensor sensor, int accuracy) {
            }
        };
        sensormanager.registerListener(sensorevent, lightsensor,SensorManager.SENSOR_DELAY_NORMAL);
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        sensormanager.unregisterListener(sensorevent);
        Log.e("传感器", "注销");
    }
}

速度传感器

  • 不一样的地方
Sensor lightsensor = sensormanager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
  • 设备返回的数据:XYZ座标轴返回的加速度


    Y轴总是9.8左右,代表地球引力作用下的加速度
  • 举个栗子: 微信摇一摇

手机平放,力作用在Z轴;长边贴地立起,作用在X轴;短边贴地,作用在y轴

根据上边补充的代码

        sensorevent = new SensorEventListener() {
            @Override
            public void onSensorChanged(SensorEvent event) {
                float x = event.values[0];
                float y = event.values[1];
                float z = event.values[2];
                //手机竖放,作用在Y轴,来回摇摆让x轴受力
                if (x > 15 && y > 15){
                    //正在微信摇一摇
                }
            }

方向传感器--简易指南针

Sensor.TYPE_ORIENTATION类型已经废弃,推荐使用加速度+磁力传感器

  • 简单获取方向传感器
    一个监听器来监听多个传感器
public class MainActivity extends Activity {

    private SensorManager sensormanager;
    private SensorEventListener listener;
    private TextView textview;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        /*
        传感器的创建
        1、先创建传感器管理器,管理所有传感器
        2、传入参数,指定特定传感器
        3、注册
        4、结束,注销传感器
         */
        // 1、获取传感器管理服务对象
        sensormanager = (SensorManager) getSystemService(SENSOR_SERVICE);
        // 2、特定传观器对象获取: 方向传感器
        Sensor accelerometersensor = sensormanager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
        Sensor magneticsensor = sensormanager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD);
        // 3、注册监听器,来实时的更改操作
        //监听器:精确度更改会立即执行onSensorChanged方法
        listener = new SensorEventListener() {
            private float[] accelerometer = new float[3];
            private float[] magnetic = new float[3];
            @Override
            public void onSensorChanged(SensorEvent event) {
                //判断当前是什么传感器
                if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER){
                    //使用clone来取值
                    accelerometer = event.values.clone();
                }else if(event.sensor.getType() == Sensor.TYPE_MAGNETIC_FIELD){
                    magnetic = event.values.clone();
                }
                float[] R = new float[9];
                float[] values = new float[3];
                if (accelerometer.length != 0 && magnetic.length != 0) {
                    //根据传输的数据,计算转动角度,将结果放进长度为9的数组中
                    sensormanager.getRotationMatrix(R, null, accelerometer, magnetic);
                    //根据上面计算出的旋转矩阵R,在计算旋转角度,存进values中
                    sensormanager.getOrientation(R, values);
                    //弧度转换成角度
                    Math.toDegrees(values[0]);
                }
            }

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

            }
        };
        //更新速率:提到游戏的规格上
        sensormanager.registerListener(listener, magneticsensor,SensorManager.SENSOR_DELAY_GAME);
        sensormanager.registerListener(listener, accelerometersensor, SensorManager.SENSOR_DELAY_GAME);

    }
    @Override
    protected void onDestroy() {
        super.onDestroy();
        sensormanager.unregisterListener(listener);
        Log.e("传感器", "注销");
    }
}
  • 粗糙版指南针

activity_layout.xml
展示指针和罗盘

    <ImageView
        android:layout_width="250dp"
        android:layout_height="250dp"
        android:id="@+id/compass"
        android:src="@drawable/compass"
        android:layout_marginTop="25dp"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true" />

    <ImageView
        android:layout_width="96dp"
        android:layout_height="wrap_content"
        android:id="@+id/arrow"
        android:src="@drawable/arrow"
        android:layout_marginTop="53dp"
        android:layout_alignTop="@+id/compass"
        android:layout_centerHorizontal="true" />

MainActivity.java

public class MainActivity extends Activity {

    private SensorManager sensormanager;
    private SensorEventListener listener;
    private ImageView arrow;
    private float lastRotateDegree;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        arrow = (ImageView)findViewById(R.id.arrow);
        /*
        传感器的创建
        1、先创建传感器管理器,管理所有传感器
        2、传入参数,指定特定传感器
        3、注册
        4、结束,注销传感器
         */
        // 1、获取传感器管理服务对象
        sensormanager = (SensorManager) getSystemService(SENSOR_SERVICE);
        // 2、特定传观器对象获取: 方向传感器
        Sensor accelerometersensor = sensormanager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
        Sensor magneticsensor = sensormanager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD);
        // 3、注册监听器,来实时的更改操作
        //监听器:精确度更改会立即执行onSensorChanged方法
        listener = new SensorEventListener() {
            private float[] accelerometer = new float[3];
            private float[] magnetic = new float[3];
            @Override
            public void onSensorChanged(SensorEvent event) {
                //判断当前是什么传感器
                if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER){
                    //使用clone来取值
                    accelerometer = event.values.clone();
                }else if(event.sensor.getType() == Sensor.TYPE_MAGNETIC_FIELD){
                    magnetic = event.values.clone();
                }
                float[] R = new float[9];
                float[] values = new float[3];
                if (accelerometer.length != 0 && magnetic.length != 0) {
                    //根据传输的数据,计算转动角度,将结果放进长度为9的数组中
                    sensormanager.getRotationMatrix(R, null, accelerometer, magnetic);
                    //根据上面计算出的旋转矩阵R,在计算旋转角度,存进values中
                    sensormanager.getOrientation(R, values);
                    //弧度转换成角度
                    Log.e("角度", String.valueOf(Math.toDegrees(values[0])));
                    float angle = (float) Math.toDegrees(values[0]);

                        //配置转动参数
                        RotateAnimation animate = new RotateAnimation(lastRotateDegree, angle, RELATIVE_TO_SELF, 0.5f, RELATIVE_TO_SELF, 0.5f);
                        animate.setFillAfter(true);
                        //开始传动配置好的动画
                        arrow.startAnimation(animate);
                        lastRotateDegree = angle;
                }

            }


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

            }
        };
        //更新速率:提到游戏的规格上
        sensormanager.registerListener(listener, magneticsensor,SensorManager.SENSOR_DELAY_GAME);
        sensormanager.registerListener(listener, accelerometersensor, SensorManager.SENSOR_DELAY_GAME);

    }
    @Override
    protected void onDestroy() {
        super.onDestroy();
        sensormanager.unregisterListener(listener);
        Log.e("传感器", "注销");
    }
}

相关文章

  • 传感器

    一、环境光传感器(Ambient Light Sensor) 二、距离传感器(Proximity Sensor) ...

  • 传感器与LBS

    传感器 如何使用传感器?获取SensorManager对象获取Sensor对象注册Sensor对象重写onAccu...

  • android传感器

    android传感器的种类 Sensor framework 使用Android的sensor framework...

  • 第十周--传感器

    传感器类型: 加速度:SENSOR_TYPE_ACCELEROMETER 磁力:SENSOR_TYPE_MAGNE...

  • android Sensor 安卓 传感器

    android Sensor 安卓 传感器 传感器基本使用 ''' 获取传感器管理器者 SensorManag...

  • Ios面试复习--传感器

    搭载在Ios设备上的传感器 运动传感器(Motion)/加速传感器、加速计(Accelermeter Sensor...

  • 2022-01-03

    磁传感器的优点:The integrated magnetic field sensor is superior ...

  • 水位传感器作业

    这是我们今天的作业:水位传感器。 word单词water level sensor水位传感器rainfall降雨量...

  • 传感器Sensor

    简单地创建一个光传感器 速度传感器 不一样的地方 设备返回的数据:XYZ座标轴返回的加速度Y轴总是9.8左右,代表...

  • 2020-08-24

    This advanced sensor can detect any movement.这台先进的传感器可以探...

网友评论

      本文标题:传感器Sensor

      本文链接:https://www.haomeiwen.com/subject/tvqkzftx.html