android 学习笔记 光照传感器的用法

  Android 中每个传感器的用法其实都比较类似,真的可以说是一通百通了。首先第一步要获取到SensorManager的实例,方法如下: 

          SensorManager senserManager = (SensorManager) 

          getSystemService(Context.SENSOR_SERVICE); 

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

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

 这里使用Sensor.TYPE_LIGHT常量来指定传感器类型,此时的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数组,所有传感器输出的信息都是存放在这里的。 
         下面我们还需要调用SensorManager的registerListener()方法来注册SensorEventListener才能使其生效,registerListener()方法接收三个参数,第一个参数就是SensorEventListener的实例,第二个参数是Sensor的实例,这两个参数我们在前面都已经成功得到了。第三个参数是用于表示传感器输出信息的更新速率,共SENSOR_DELAY_UI、SENSOR_DELAY_NORMAL、SENSOR_DELAY_GAME和SENSOR_DELAY_FASTEST这四种值可选,它们的更新速率是依次递增的。因此,注册一个SensorEventListener就可以写成: 

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

sensorManager.unregisterListener(listener);

整个项目代码如下所示:

package com.test.lightsensortest;

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) {
		}

	};

}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值