未经本人授权,不得转载!否则必将维权到底
最近我司产品提出了一个很常见的需求:App 通过手机光感器,获取当前的光线强度。根据光线强弱,弹窗提示用户是否切换白天/夜间模式。网上看了很多的博客,都没有解决我的问题。这个需求应该是挺常见的,故记录一下,供后人参考。
#一、简介
光线感应器( Light Sensor ):光传感器主要用来检测手机周围光的强度,与其他传感器不同的是,该传感器监测手机周围光的强度,且单位为 lux。光传感器的开发与其他各种传感器的开发步骤基本相同,只是监测的是 Sensor.TYPE_LIGHT。如果学会了光感器的开发,开发其他的传感器则只需要改变监听器对象及注册监听的方法,然后根据每个人不同的业务需求,来修改后续的逻辑。
#二、详细开发步骤(其他传感器基本类似)
######1.通过 mContext.getSystemService() 得到传感器管理类
SensorManager mSensorManager = (SensorManager) mContext.getSystemService(Context.SENSOR_SERVICE);
######2.监测手机上支持的传感器,如果手机没有光传感器,一定要做好容错!!!否则你的业务逻辑会出现空指针异常(其他的传感器同理,一定要先判断手机是否拥有这个传感器)
//获取手机上支持的所有传感器
List<Sensor> mList = mSensorManager.getSensorList(Sensor.TYPE_ALL);
for (Sensor sensor : mList) {
L.d("KeithXiaoY","名字:" + sensor.getName());
L.d("KeithXiaoY","type:" + sensorTypes.get(sensor.getType()) + "(" + sensor.getType() +")");
L.d("KeithXiaoY","vendor:" + sensor.getVendor());
L.d("KeithXiaoY","version:" + sensor.getVersion());
L.d("KeithXiaoY","resolution:" + sensor.getResolution());
L.d("KeithXiaoY","max range:" + sensor.getMaximumRange());
L.d("KeithXiaoY","power:" + sensor.getPower());
}
######3.我的需求只需要光传感器,根据上一条打出来传感器的列表,光感器的 Type = 5,所以我做了如下判断:
//获取手机上支持的传感器
mList = mSensorManager.getSensorList(Sensor.TYPE_ALL);
for (Sensor sensor : mList) {
if (Sensor.TYPE_LIGHT == sensor.getType()){
mIsContains = true ; //这是一个 Boolean 值,true 代表有这个传感器、false 代表没有
return;
}
}
######4.下面就是要注册光传感器了
/* 第三个参数是传感器数据更新数据的速度
有以下四个值可选,他们的速度是递增的
SENSOR_DELAY_UI