Android光線感測器獲取光線強弱。LightSensorManager封裝類
阿新 • • 發佈:2019-02-16
在Android開發中,有時我們需要獲知裝置所在環境的光線強弱情況,當然這需要我們裝置擁有光線感測器
下面是我簡單封裝的一個光線感測器管理類,主要提供了3個方法:
1.start():啟動,在獲取光照強度前呼叫。
2.stop():停止,在不再需要獲取光照強度後呼叫。
3.getLux():獲取光照強度,單位為勒克斯(lux)。
如果你需要額外的一些方法,可以根據返回的光照強度自行新增。下面是整個LightSensorManager類
import android.content.Context; import android.hardware.Sensor; import android.hardware.SensorEvent; import android.hardware.SensorEventListener; import android.hardware.SensorManager; import android.util.Log; public class LightSensorManager { private static final boolean DEBUG = true; private static final String TAG = "LightSensor"; private static LightSensorManager instance; private SensorManager mSensorManager; private LightSensorListener mLightSensorListener; private boolean mHasStarted = false; private LightSensorManager() { } public static LightSensorManager getInstance() { if (instance == null) { instance = new LightSensorManager(); } return instance; } public void start(Context context) { if (mHasStarted) { return; } mHasStarted = true; mSensorManager = (SensorManager) context.getApplicationContext().getSystemService(Context.SENSOR_SERVICE); Sensor lightSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_LIGHT); // 獲取光線感測器 if (lightSensor != null) { // 光線感測器存在時 mLightSensorListener = new LightSensorListener(); mSensorManager.registerListener(mLightSensorListener, lightSensor, SensorManager.SENSOR_DELAY_NORMAL); // 註冊事件監聽 } } public void stop() { if (!mHasStarted || mSensorManager == null) { return; } mHasStarted = false; mSensorManager.unregisterListener(mLightSensorListener); } /** * 獲取光線強度 */ public float getLux() { if (mLightSensorListener != null) { return mLightSensorListener.lux; } return -1.0f; // 預設返回-1,表示裝置無光線感測器或者為呼叫start()方法 } private class LightSensorListener implements SensorEventListener { private float lux; // 光線強度 public void onAccuracyChanged(Sensor sensor, int accuracy) { } public void onSensorChanged(SensorEvent event) { if (event.sensor.getType() == Sensor.TYPE_LIGHT) { // 獲取光線強度 lux = event.values[0]; if (DEBUG) { Log.d(TAG, "lux : " + lux); } } } } }
對於這個光線強度的值。越暗數值越低,最低應該是0,在白天室內大概有300左右,僅供參考,不知道不同的裝置會不會存在一定誤差。
呼叫程式就不貼了,通過log就可以很直接的看得到資料了。這個類在我的自定義相機裡自動調節曝光程度使用到了,效果還是有的。