Android編程使用光線傳感器獲取光線強弱的方法【LightSensorManager封裝類】
本文實例講述了Android編程使用光線傳感器獲取光線強弱的方法。分享給大家供大家參考,具體如下:
在Android開發(fā)中,有時我們需要獲知設備所在環(huán)境的光線強弱情況,當然這需要我們設備擁有光線傳感器。通常我們手機的屏幕自動亮度都是用光線傳感器來實現(xiàn)的。該傳感器在前置攝像頭附近,此外,還有一個距離傳感器。這里我們主要講解如何使用Android手機的光線傳感器。
下面是我簡單封裝的一個光線傳感器管理類,主要提供了3個方法:
1.start():啟動,在獲取光照強度前調(diào)用。
2.stop():停止,在不再需要獲取光照強度后調(diào)用。
3.getLux():獲取光照強度,單位為勒克斯(lux)。
如果你需要額外的一些方法,可以根據(jù)返回的光照強度自行添加。下面是整個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); // 注冊事件監(jiān)聽
}
}
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,表示設備無光線傳感器或者為調(diào)用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);
}
}
}
}
}
對于這個光線強度的值。越暗數(shù)值越低,最低應該是0,在白天室內(nèi)大概有300左右,僅供參考,不知道不同的設備會不會存在一定誤差。
調(diào)用程序就不貼了,通過log就可以很直接的看得到數(shù)據(jù)了。這個類在我的自定義相機里自動調(diào)節(jié)曝光程度使用到了,效果還是有的。
更多關于Android相關內(nèi)容感興趣的讀者可查看本站專題:《Android開發(fā)入門與進階教程》、《Android視圖View技巧總結(jié)》、《Android編程之a(chǎn)ctivity操作技巧總結(jié)》、《Android操作SQLite數(shù)據(jù)庫技巧總結(jié)》、《Android操作json格式數(shù)據(jù)技巧總結(jié)》、《Android資源操作技巧匯總》及《Android控件用法總結(jié)》
希望本文所述對大家Android程序設計有所幫助。
相關文章
Android編程實現(xiàn)支持拖動改變位置的圖片中疊加文字功能示例
這篇文章主要介紹了Android編程實現(xiàn)支持拖動改變位置的圖片中疊加文字功能,可實現(xiàn)Android圖片與文字動態(tài)操作功能,涉及視圖及圖片動態(tài)運算相關操作技巧,需要的朋友可以參考下2017-01-01
android開發(fā)教程之實現(xiàn)toast工具類
這篇文章主要介紹了android開發(fā)中需要的toast工具類,需要的朋友可以參考下2014-05-05
Android編程創(chuàng)建與解析xml的常用方法詳解
這篇文章主要介紹了Android編程創(chuàng)建與解析xml的常用方法,結(jié)合具體實例形式較為詳細的分析了Android操作xml文件的步驟、實現(xiàn)技巧與相關注意事項,需要的朋友可以參考下2017-05-05
Android第三方HTTP網(wǎng)絡支持包OkHttp的基礎使用教程
在GitHub上開源的安卓HTTP編程包OkHttp正在積累著越來越高的人氣,這里我們就來看一下這款Android第三方HTTP網(wǎng)絡支持包OkHttp的基礎使用教程:2016-07-07
Android CountDownTimer實現(xiàn)定時器和倒計時效果
這篇文章主要為大家詳細介紹了Android CountDownTimer實現(xiàn)定時器和倒計時效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-02-02
Android模擬開關按鈕點擊打開動畫(屬性動畫之平移動畫)
這篇文章主要介紹了Android模擬開關按鈕點擊打開動畫(屬性動畫之平移動畫)的相關資料,非常不錯,具有參考借鑒價值,需要的朋友可以參考下2016-09-09
Android實現(xiàn)捕獲TextView超鏈接的方法
這篇文章主要介紹了Android實現(xiàn)捕獲TextView超鏈接的方法,涉及Android查找TextView中超鏈接的相關實現(xiàn)技巧,具有一定參考借鑒價值,需要的朋友可以參考下2015-10-10

