光照传感器

光照传感器的用法
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);//取消监听
        }
    }
}

 

posted @ 2016-05-14 14:48  ts-android  阅读(292)  评论(0编辑  收藏  举报