光照传感器
Android 中每个传感器的用法其实都比较类似,真的可以说是一通百通了。首先第一步要获取到 SensorManager 的实例
SensorManager senserManager = (SensorManager)
getSystemService(Context.SENSOR_SERVICE);
SensorManager 是系统所有传感器的管理器,有了它的实例之后就可以调用getDefaultSensor()方法来得到任意的传感器类型了
Sensor sensor = senserManager.getDefaultSensor(Sensor.TYPE_LIGHT);
接下来我们需要对传感器输出的信号进行监听,这就要借助 SensorEventListener 来实现了。SensorEventListener 是一个接口,其中定义了 onSensorChanged()和onAccuracyChanged()这两个方法
SensorEventListener listener = new SensorEventListener() {
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
}
@Override
public void onSensorChanged(SensorEvent event) {
}
};
方法中传入了一个 SensorEvent 参数,这个参数里又包含了一个 values 数组,所有传感器输出的信息都是存放在这里的。下 面 我 们 还 需 要 调 用 SensorManager 的 registerListener() 方 法 来 注 册SensorEventListener 才能使其生效,registerListener()方法接收三个参数,第一个参数就是 SensorEventListener 的实例,第二个参数是 Sensor 的实例,这两个参数我们在前面都已经成功得到了。第三个参数是用于表示传感器输出信息的更新速率SENSOR_DELAY_UI 、 SENSOR_DELAY_NORMAL 、 SENSOR_DELAY_GAME 和SENSOR_DELAY_FASTEST 这四种值可选,它们的更新速率是依次递增的
senserManager.registerListener(listener, senser, SensorManager.SENSOR_DELAY_NORMAL);
另外始终要记得, 当程序退出或传感器使用完毕时, 一定要调用 unregisterListener ()方法将使用的资源释放掉
sensorManager.unregisterListener(listener);
代码:
public class MainActivity extends Activity {
SensorManager sensorManager;
TextView light;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
light=(TextView) findViewById(R.id.textView1);
sensorManager=(SensorManager) getSystemService(Context.SENSOR_SERVICE);
Sensor sensor=sensorManager.getDefaultSensor(Sensor.TYPE_LIGHT);
sensorManager.registerListener(null, sensor, SensorManager.SENSOR_DELAY_NORMAL);
}
@Override
protected void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
if (sensorManager!=null) {
sensorManager.unregisterListener(listener);
}
}
private SensorEventListener listener=new SensorEventListener() {
@Override
public void onSensorChanged(SensorEvent arg0) {
// TODO Auto-generated method stub
// values数组中第一个下标的值就是当前的光照强度
float value