• Android 传感器


    1. 光照传感器

    activity_main.xml

    复制代码
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    
        <TextView
            android:id="@+id/light_level"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerInParent="true"
             />
    
    </RelativeLayout>
    复制代码

    MainActivity.java

    复制代码
    package liqing.lightsensortest;
    
    import android.content.Context;
    import android.hardware.Sensor;
    import android.hardware.SensorEvent;
    import android.hardware.SensorEventListener;
    import android.hardware.SensorManager;
    import android.os.Bundle;
    import android.support.v7.app.AppCompatActivity;
    import android.widget.TextView;
    
    public class MainActivity extends AppCompatActivity {
        private SensorManager sensorManager;
        private TextView lightLevel;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            lightLevel = (TextView) findViewById(R.id.light_level);
    
            //获取系统传感器的管理器
            sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
            //得到 光照传感器
            Sensor sensor = sensorManager.getDefaultSensor(Sensor.TYPE_LIGHT);
            // 光照传感器注册(register)监听,参数为(SensorEventListener实例,传感器对象,输出信息速率)
            sensorManager.registerListener(listener, sensor, SensorManager.SENSOR_DELAY_NORMAL);
        }
    
        private SensorEventListener listener = new SensorEventListener() {
            @Override
            public void onSensorChanged(SensorEvent event) {
                float value = event.values[0];
                lightLevel.setText("Current light level is " + value + " lx ");
    
            }
    
            @Override
            public void onAccuracyChanged(Sensor sensor, int accuracy) {
    
            }
        };
    
        @Override
        protected void onDestroy() {
    
            super.onDestroy();
            if (sensorManager != null) {
                //注销监听
                sensorManager.unregisterListener(listener);
            }
        }
    
    }
    复制代码

    2. 加速器传感器(摇一摇)

    activity_main.xml

    复制代码
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    
        <TextView
            android:id="@+id/light_level"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerInParent="true"
            />
    
    </RelativeLayout>
    复制代码

    MainActivity.java

    复制代码
    public class MainActivity extends AppCompatActivity {
        private SensorManager sensorManager;
        private TextView lightLevel;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            lightLevel = (TextView) findViewById(R.id.light_level);
    
    
            sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
            //得到 accelerometer(加速器)传感器
            Sensor sensor = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
    
            sensorManager.registerListener(listener, sensor, SensorManager.SENSOR_DELAY_NORMAL);
        }
    
        private SensorEventListener listener = new SensorEventListener() {
            @Override
            public void onSensorChanged(SensorEvent event) {
                //方向传感器SensorEvent的取值有X轴,Y轴,Z轴,去绝对值Math.abs()
                float x = Math.abs(event.values[0]);
                float y = Math.abs(event.values[1]);
                float z = Math.abs(event.values[2]);
                if (x > 15 || y > 15 || z > 15) {
                    lightLevel.setText("摇一摇 ");
                }
    
    
            }
    
            @Override
            public void onAccuracyChanged(Sensor sensor, int accuracy) {
    
            }
        };
    
        @Override
        protected void onDestroy() {
    
            super.onDestroy();
            if (sensorManager != null) {
                //注销监听
                sensorManager.unregisterListener(listener);
            }
        }
    
    }
    复制代码

    3.方向传感器(赛车游戏控制方向) 使用加速传感器和地磁传感器,通过getRotationMatrix()和getOrientation()得到XYZ旋转值

    main_activity.xml

    复制代码
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    
        <TextView
            android:id="@+id/light_level"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerInParent="true"
             />
    
    </RelativeLayout>
    复制代码

    MainActivity.java

    复制代码
    package liqing.lightsensortest;
    
    import android.content.Context;
    import android.hardware.Sensor;
    import android.hardware.SensorEvent;
    import android.hardware.SensorEventListener;
    import android.hardware.SensorManager;
    import android.os.Bundle;
    import android.support.v7.app.AppCompatActivity;
    import android.widget.TextView;
    
    public class MainActivity extends AppCompatActivity {
        private SensorManager sensorManager;
        private TextView textView;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            textView = (TextView) findViewById(R.id.light_level);
            sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
            //得到 accelerometer(加速器)传感器
            Sensor accelerometerSensor = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
            //带到 magnetic_FIELD(地磁的_领域)传感器
            Sensor magneticSensor = sensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD);
            //注意(SENSOR_DELAY_GAME)传感器的速率改变的相当快
            sensorManager.registerListener(listener, accelerometerSensor, SensorManager.SENSOR_DELAY_GAME);
            sensorManager.registerListener(listener, magneticSensor, SensorManager.SENSOR_DELAY_GAME);
    
        }
    
        private SensorEventListener listener = new SensorEventListener() {
            float[] accelerometerValues = new float[3];
            float[] magneticValues = new float[3];
    
            @Override
            public void onSensorChanged(SensorEvent event) {
                //注意SensorEvent是所以传感器的信息(包括类型和值)
                switch (event.sensor.getType()) {
                    case Sensor.TYPE_ACCELEROMETER:
                        //clone()克隆
                        accelerometerValues = event.values.clone();
                        break;
                    case Sensor.TYPE_MAGNETIC_FIELD:
                        //clone()克隆
                        magneticValues = event.values.clone();
                        break;
                    default:
                        break;
                }
                float[] R = new float[9];//矩阵的值
                float[] values = new float[3];//X,Y,Z旋转的值
                //getRotationMatrix(得到旋转矩阵)
                SensorManager.getRotationMatrix(R, null, accelerometerValues, magneticValues);
                //getOrientation(得到选中的值)
                SensorManager.getOrientation(R, values);
                textView.setText(
                        "X=" + values[0] + "
    " 
                        + "Y=" + values[1] + "
    " 
                        + "Z=" + values[2] + "
    ");
            }
            @Override
            public void onAccuracyChanged(Sensor sensor, int accuracy) {
    
            }
        };
    
        @Override
        protected void onDestroy() {
    
            super.onDestroy();
            if (sensorManager != null) {
                //注销监听
                sensorManager.unregisterListener(listener);
            }
        }
    
    }
     
  • 相关阅读:
    vim编辑器下nginx.conf语法高亮
    Spring Boot 警告:An illegal reflective access operation has occurred
    Idea使用 MyBatis Generator 插件快速生成代码
    SpringBoot 自定义线程池处理异步任务
    idea 处理mybatis的mapper.xml警告提示信息让其不显示
    mybatis 报文档根元素 "mapper" 必须匹配 DOCTYPE 根 "null"
    zookeeper生成分布式自增ID
    Navicat卸载注册表 激活码
    mybatis自定义TypeHandler实现list转string
    Java创建ES索引实现
  • 原文地址:https://www.cnblogs.com/android-blogs/p/4835145.html
Copyright © 2020-2023  润新知