简单调用手机的光照传感器来检测环境的光强,很easy哒。
Android的每个传感器的用法都很相似,首先要获取SensorManager的实例,
1.获取SensorManager实例
SensorManager sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
2.调用具体的传感器
SensorManager是系统所有传感器的管理器,有了它的实例后就可以调用getDefultSensor()方法来得到任意的传感器类型,
Sesnor sensor = sensorManager.getDefaultSensor(Sensor.TYPE_LIGHT);//这里是光照传感器
4.对传感器输出的信号进行监听
private SensorEventListener listener = new SensorEventListener() {
@Override
public void onSensorChanged(SensorEvent event) {
}
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
}
};
这里的SensorEventListener接口定义了两个方法,当传感器精度发生变化时调用onAccuracyChanged方法,当传感器检测到的数值变化时调用onSensorChanged()方法。
onSensorChanged()方法传入了一个名为SensorEvent的参数,其中包含了一个values数组,所有传感器的信息都存放在values数组里。
5.注册传感器的监听器
接下来需要调用SensorManager的registerListener()方法来注册SensorEventListener才能使其生效,这里的registerListener()方法接收了三个参数,第一个为SensorEventListener的实例,第二个为Sensor实例,第三个为传感器输出信息的更新速度,有ENSOR_DELAY_UI、SENSOR_DELAY_NORMAL、SENSOR_DELAY_GAME和SENSOR_DELAY_FASTEST四个可选,它们的更新速度依次递增。
sensorManager.registerListener(listener, sensor,
SensorManager.SENSOR_DELAY_NORMAL);
这就是(光线)传感器的简单用法,接下来上实例吧~~
-----------------------------------------------------
1.布局文件只要一个TextView,简单粗暴,能显示光强即可。
<TextView
android:id="@+id/light_level"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/hello_world"
android:layout_centerInParent="true"
android:textSize="20sp"/>
2.MainActivity部分代码,
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);// 获取TextView实例
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) {
// 当传感器光强变化时调用
}
};
}
注意,这里的values中只有一个值——光强,存储在values[0]中。
3.运行之
595.01lx(勒克斯),这个值是我测到的座位附近最大值,它是不断变化的呦,这个要感谢可爱的onSensorChanged()方法~
LOL !
没有评论:
发表评论