博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android 传感器
阅读量:4684 次
发布时间:2019-06-09

本文共 6058 字,大约阅读时间需要 20 分钟。

1. 光照传感器

activity_main.xml

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

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

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] + "\n"                     + "Y=" + values[1] + "\n"                     + "Z=" + values[2] + "\n");        }        @Override        public void onAccuracyChanged(Sensor sensor, int accuracy) {        }    };    @Override    protected void onDestroy() {        super.onDestroy();        if (sensorManager != null) {            //注销监听            sensorManager.unregisterListener(listener);        }    }}

 

 

转载于:https://www.cnblogs.com/android-blogs/p/4835145.html

你可能感兴趣的文章
KNN算法的感受 1
查看>>
用Maven构建Mahout项目实现协同过滤userCF--单机版
查看>>
Java多线程-线程的调度(守护线程)
查看>>
Bootstrap 简介(Web前端CSS框架)
查看>>
Bootstrap 概览
查看>>
nginx配置ssl证书实现https访问
查看>>
c# while穷举(凑钱)
查看>>
EnCase v7 could not recognize Chinese character folder names / file names on Linux Platform
查看>>
c#中序列化和反序列化的理解
查看>>
c#Socket通信
查看>>
第七周翻译
查看>>
HTTPS协议的实现原理
查看>>
MvvmLight的Message使用
查看>>
0404 构建之法第四章理解
查看>>
Hunters
查看>>
2018二月实现计划成果及其三月规划
查看>>
封装springmvc处理ajax请求结果
查看>>
jQuery+ localStorage 实现一个简易的计时器
查看>>
tyvj P2018 「Nescafé26」小猫爬山 解题报告
查看>>
类名.class和getClass()区别
查看>>