光照传感器
光照传感器的用法
Android 中每个传感器的用法其实都比较类似,真的可以说是一通百通了。
首先第一步要获取到 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()这两个方法
registerListener()方法接收三个参数,第一个参数就是 SensorEventListener 的
实例,第二个参数是 Sensor的实例,这两个参数我们在前面都已经成功得到了。第三个参数是
用于表示传感器输出信息的更新速率,共有 SENSOR_DELAY_UI、SENSOR_DELAY_NORMAL、
SENSOR_DELAY_GAME 和 SENSOR_DELAY_FASTEST 这四种值可选,它们的更新速率是
依次递增的。
另外始终要记得,当程序退出或传感器使用完毕时,一定要调用 unregisterListener ()方法将使用的资源释放掉,如下所示:
sensorManager.unregisterListener(listener);
代码如下:
//光照传感器的使用 public class MainActivity extends Activity{ private TextView tv_light; private TextView tv_lightInfo; private SensorManager sensorManager; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); tv_light = (TextView) findViewById(R.id.tv_light);//用于显示光照传感器的结果 tv_lightInfo = (TextView) findViewById(R.id.tv_lightInfo);//用于显示光照传感器的一些信息 //获取传感器管理者 sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE); //根据传感器类型获取传感器对象 Sensor lightSensor=sensorManager.getDefaultSensor(Sensor.TYPE_LIGHT); //为传感器管理者注册监听器(指明监听哪个传感器和监听速率)NORMAL为标准 sensorManager.registerListener(listener, lightSensor, SensorManager.SENSOR_DELAY_NORMAL); //获取光照传感器的信息 String str="\n名字:"+lightSensor.getName()+"\n电池:"+lightSensor.getPower() +"\n类型:"+lightSensor.getType()+"\n供应商:"+lightSensor.getVendor() +"\n版本:"+lightSensor.getVersion()+"\n幅度:"+lightSensor.getMaximumRange(); tv_lightInfo.setText(str); } //传感器监听器 private SensorEventListener listener=new SensorEventListener() { @Override//传感器改变时调用 public void onSensorChanged(SensorEvent event) { float value=event.values[0];//values数组中的第一个下标的值就是当前的光照强度 tv_light.setText("光照传感器的值:"+value+"(lx)"); } @Override//传感器进度发生改变时调用 public void onAccuracyChanged(Sensor sensor, int accuracy) { } }; @Override protected void onDestroy() { super.onDestroy(); if(sensorManager!=null){ sensorManager.unregisterListener(listener);//取消监听 } } }