光照传感器

原创 2016年05月30日 12:26:19

转载请注明出处:

今天来学习一下光照传感器:

首先第一步要获取到SensorManager的实例,方法如下:

SensorManager senserManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);

SensorManager是系统所有传感器的管理器,有了它的实例之后就可以调用getDefaultSensor()方法来得到任意的传感器类型了,如下所示:

Sensor sensor = senserManager.getDefaultSensor(Sensor.TYPE_LIGHT);

这里使用Sensor.TYPE_LIGHT常量来指定传感器类型,此时的Sensor实例就代表着一个光照传感器。Sensor中还有很多其他传感器类型的常量,在后面几节中我们会慢慢学到。

接下来我们需要对传感器输出的信号进行监听,这就要借助SensorEventListener来实现了。SensorEventListener是一个接口,其中定义了onSensorChanged()onAccuracyChanged()这两个方法,如下所示:

SensorEventListener listener = new SensorEventListener() {

@Override

public void onAccuracyChanged(Sensor sensor, int accuracy) {

}

 

@Override

public void onSensorChanged(SensorEvent event) {

}

 

};

当传感器的精度发生变化时就会调用onAccuracyChanged()方法,当传感器监测到的数值发生变化时就会调用onSensorChanged()方法。可以看到onSensorChanged()方法中传入了一个SensorEvent参数,这个参数里又包含了一个values数组,所有传感器输出的信息都是存放在这里的。

下面我们还需要调用SensorManagerregisterListener()方法来注册SensorEventListener才能使其生效,registerListener()方法接收三个参数,第一个参数就是SensorEventListener的实例,第二个参数是Sensor的实例,这两个参数我们在前面都已经成功得到了。第三个参数是用于表示传感器输出信息的更新速率,共有SENSOR_DELAY_UISENSOR_DELAY_NORMALSENSOR_DELAY_GAMESENSOR_DELAY_FASTEST这四种值可选,它们的更新速率是依次递增的。因此,注册一个SensorEventListener就可以写成:

senserManager.registerListener(listener, senser, SensorManager.SENSOR_ DELAY_NORMAL);

另外始终要记得,当程序退出或传感器使用完毕时,一定要调用unregisterListener ()方法将使用的资源释放掉,如下所示:

sensorManager.unregisterListener(listener);

实例:

就是手机当前检测到的光照强度,以勒克斯为单位,我们直接将这个值显示到TextView上即可

光照不需要配置权限


布局文件:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.example.sensor_light.MainActivity" >

    <TextView
        android:id="@+id/light_level"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/hello_world" />

</RelativeLayout>

MainActivity

package com.example.sensor_light;

import android.app.Activity;
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.view.Menu;
import android.view.MenuItem;
import android.widget.TextView;


public class MainActivity extends Activity {

	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);
		sensorManager.registerListener(listener, sensor, SensorManager. SENSOR_DELAY_NORMAL);
	}

	@Override
	protected void onDestroy() {
		super.onDestroy();
		if (sensorManager != null) {
			sensorManager.unregisterListener(listener);
		}
	}

	private SensorEventListener listener = new SensorEventListener() {

		@Override
		public void onSensorChanged(SensorEvent event) {
			// values数组中第一个下标的值就是当前的光照强度
			float value = event.values[0];
			lightLevel.setText("Current light level is " + value + " lx");
		}

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

	};

}


版权声明:本文为博主原创文章,转载请注明出处。

Android之传感器(一)光照传感器

Android之传感器(一)光照传感器 一,简介 手机中内置的传感器是一种微型的物理设备,它能够探测、感受到外界的信号,并按一 定规律转换成我们所需要的信息。Android 手机通常都会支持多种...
  • liu857279611
  • liu857279611
  • 2016年01月29日 11:21
  • 1061

2.传感器学习笔记之光照传感器

这节课我们来学习安卓中的光照传感器,已经会的请绕过此篇。
  • hadues
  • hadues
  • 2015年08月29日 04:32
  • 1755

有关光照模块的具体问题及解决方案

有关光照模块调试过程中,遇到的问题及其解决过程,直至可以通过模块采集,使用1602显示出实时光照值;...
  • q_kabukabu
  • q_kabukabu
  • 2017年12月03日 21:37
  • 34

Android传感器---Environment Sensor

本文译自:http://developer.android.com/guide/topics/sensors/sensors_environment.html#sensors-using-humid ...
  • FireOfStar
  • FireOfStar
  • 2012年10月30日 20:19
  • 2698

CC2530基础实验之采集光照模拟量控制LED状态

/* 当光照强的时候关闭LED灯 手捂着传感器跑马灯 */ #includeint count=0; char output[8];void Delay(unsigned char m) { ...
  • qq_33551792
  • qq_33551792
  • 2017年03月25日 18:35
  • 637

GY-30数字光强传感器通过I²C接入Arduino

作者:颜哲锟GY-30数字光强传感器通过I²C通信协议接入Arduino过程中的一些问题和解决方案前言刚拿到GY-30数字光强传感器的时候,真心感觉比原来的模拟输出的光强传感器要精确好几倍。没被拆封的...
  • UbiBots
  • UbiBots
  • 2016年06月08日 15:16
  • 6997

Android一些传感器的简介

写在前面 Android中各个传感器的应用都是一个模子.后面请看具体实现情况.拿到SensorManager(传感器管理器). 获取响应传感器getDefaultSensor(). 监听传感器感应...
  • itCatface
  • itCatface
  • 2015年12月31日 10:17
  • 292

Geek-Band--第十周分享

这周我们的内容是Android里面的传感器传感器有很多从Android1.5开始,系统内置了对多达八种传感器的支持,他们分别是:加速度传感器(accelerometer)、陀螺仪(gyroscope)...
  • yessimida
  • yessimida
  • 2016年05月08日 09:57
  • 187

Android传感器之光照传感器

package com.example.illumination_sensor; import android.hardware.Sensor; import android.ha...
  • zhangfei2018
  • zhangfei2018
  • 2013年08月30日 10:46
  • 532

用树莓派学编程系列4——环境光照强度测量

环境光照强度测量
  • weixiazailaide
  • weixiazailaide
  • 2016年10月10日 22:18
  • 2608
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:光照传感器
举报原因:
原因补充:

(最多只允许输入30个字)