zoukankan      html  css  js  c++  java
  • Android光线传感器

    光线传感器可以用来感知周围的光线环境变化。借助这个原理,我们可以开发一个光线探测器。

    MainActivity.java代码

    package com.sdutacm.sensor;
    
    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.util.Log;
    import android.widget.Toast;
    
    public class MainActivity extends AppCompatActivity implements SensorEventListener{
    
        private SensorManager sensorManager;
    
        private Sensor sensor;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            getSensorManager();
        }
    
    
        @Override
        public void onSensorChanged(SensorEvent event) {
            //Sensor 发生变化时,在次通过event.values获取数据
    //        float x = event.values[0];
    //        float y = event.values[0];
    //        float z = event.values[0];
            float light = event.values[0];
            Log.d("Light","当前的光线强度为:"+light+"勒克斯");
            Toast.makeText(this,"当前的光线强度为:"+light+"勒克斯",Toast.LENGTH_SHORT).show();
    
    //        if(x>20 || y>20 || z>20){
    //            Toast.makeText(this,"欢迎使用摇一摇",Toast.LENGTH_SHORT).show();
    //        }
        }
    
        @Override
        public void onAccuracyChanged(Sensor sensor, int accuracy) {
    
        }
    
        public void getSensorManager() {
            sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
            /**
             * 传入的参数决定传感器的类型
             * Senor.TYPE_ACCELEROMETER: 加速度传感器
             * Senor.TYPE_LIGHT:光照传感器
             * Senor.TYPE_GRAVITY:重力传感器
             * SenorManager.getOrientation(); //方向传感器
             */
            sensor = sensorManager.getDefaultSensor(Sensor.TYPE_LIGHT);
        }
    
        @Override
        protected void onResume() {
            super.onResume();
            if(sensorManager != null){
                //一般在Resume方法中注册
                /**
                 * 第三个参数决定传感器信息更新速度
                 * SensorManager.SENSOR_DELAY_NORMAL:一般
                 * SENSOR_DELAY_FASTEST:最快
                 * SENSOR_DELAY_GAME:比较快,适合游戏
                 * SENSOR_DELAY_UI:慢
                 */
                sensorManager.registerListener(this,sensor,SensorManager.SENSOR_DELAY_NORMAL);
            }
        }
    
        @Override
        protected void onPause() {
            super.onPause();
            if(sensorManager != null){
                //解除注册
                sensorManager.unregisterListener(this,sensor);
            }
        }
    
    }
    

    event.values返回的数组的第一个值就是光线强度值,单位是勒克斯。勒克斯是照度的国际单位(SI),又称弥烛光,1流明的光通量均匀分布在1一平方米面积上的照度就是一勒克斯,可以标作勒[克斯],简称勒,简作lx
    .适宜于阅读的照度约为600勒克斯,如果你在阅读我的文章或者在编写程序,那么运行此程序,在控制台上观察周围的光线强度,看看是否适合阅读。如果是阴天,将手机放置屋外时,光照强度会瞬间变得很低,不再适合阅读和其他工作。将手机放置到抽屉时,光线强度会很快变成0勒克斯。

  • 相关阅读:
    报错:Message is larger than modules
    报错:常量字符串过长
    C#监控WinCE手机用户操作的程序,并通过usb连接发送到pc监听服务
    .Net Compact Framework coredll.dll API列表
    Oracle任意日期得到该周第一天的日期
    ORACLE查看锁表进程及杀死进程的语句
    客户端js与服务端通过BASE64进行交互
    为什么在powerdesigner成功将表生成到oracle,用sql操作提示表或视图不存在
    gprof的简单实用
    学习笔记fputs与printf
  • 原文地址:https://www.cnblogs.com/CCCrunner/p/11781870.html
Copyright © 2011-2022 走看看