Android編程使用光線傳感器獲取光線強(qiáng)弱的方法【LightSensorManager封裝類】
本文實(shí)例講述了Android編程使用光線傳感器獲取光線強(qiáng)弱的方法。分享給大家供大家參考,具體如下:
在Android開發(fā)中,有時(shí)我們需要獲知設(shè)備所在環(huán)境的光線強(qiáng)弱情況,當(dāng)然這需要我們?cè)O(shè)備擁有光線傳感器。通常我們手機(jī)的屏幕自動(dòng)亮度都是用光線傳感器來(lái)實(shí)現(xiàn)的。該傳感器在前置攝像頭附近,此外,還有一個(gè)距離傳感器。這里我們主要講解如何使用Android手機(jī)的光線傳感器。
下面是我簡(jiǎn)單封裝的一個(gè)光線傳感器管理類,主要提供了3個(gè)方法:
1.start()
:?jiǎn)?dòng),在獲取光照強(qiáng)度前調(diào)用。
2.stop()
:停止,在不再需要獲取光照強(qiáng)度后調(diào)用。
3.getLux()
:獲取光照強(qiáng)度,單位為勒克斯(lux)。
如果你需要額外的一些方法,可以根據(jù)返回的光照強(qiáng)度自行添加。下面是整個(gè)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) { // 光線傳感器存在時(shí) mLightSensorListener = new LightSensorListener(); mSensorManager.registerListener(mLightSensorListener, lightSensor, SensorManager.SENSOR_DELAY_NORMAL); // 注冊(cè)事件監(jiān)聽 } } public void stop() { if (!mHasStarted || mSensorManager == null) { return; } mHasStarted = false; mSensorManager.unregisterListener(mLightSensorListener); } /** * 獲取光線強(qiáng)度 */ public float getLux() { if (mLightSensorListener != null) { return mLightSensorListener.lux; } return -1.0f; // 默認(rèn)返回-1,表示設(shè)備無(wú)光線傳感器或者為調(diào)用start()方法 } private class LightSensorListener implements SensorEventListener { private float lux; // 光線強(qiáng)度 public void onAccuracyChanged(Sensor sensor, int accuracy) { } public void onSensorChanged(SensorEvent event) { if (event.sensor.getType() == Sensor.TYPE_LIGHT) { // 獲取光線強(qiáng)度 lux = event.values[0]; if (DEBUG) { Log.d(TAG, "lux : " + lux); } } } } }
對(duì)于這個(gè)光線強(qiáng)度的值。越暗數(shù)值越低,最低應(yīng)該是0,在白天室內(nèi)大概有300左右,僅供參考,不知道不同的設(shè)備會(huì)不會(huì)存在一定誤差。
調(diào)用程序就不貼了,通過(guò)log就可以很直接的看得到數(shù)據(jù)了。這個(gè)類在我的自定義相機(jī)里自動(dòng)調(diào)節(jié)曝光程度使用到了,效果還是有的。
更多關(guān)于Android相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Android開發(fā)入門與進(jìn)階教程》、《Android視圖View技巧總結(jié)》、《Android編程之a(chǎn)ctivity操作技巧總結(jié)》、《Android操作SQLite數(shù)據(jù)庫(kù)技巧總結(jié)》、《Android操作json格式數(shù)據(jù)技巧總結(jié)》、《Android資源操作技巧匯總》及《Android控件用法總結(jié)》
希望本文所述對(duì)大家Android程序設(shè)計(jì)有所幫助。
相關(guān)文章
Android語(yǔ)音識(shí)別技術(shù)詳解及實(shí)例代碼
這篇文章主要介紹了Android語(yǔ)音識(shí)別技術(shù)的相關(guān)資料,并附實(shí)例代碼及實(shí)例實(shí)現(xiàn)效果圖,需要的朋友可以參考下2016-09-09Android最簡(jiǎn)單的限制輸入方法(只包含數(shù)字、字母和符號(hào))
這篇文章主要給大家介紹了關(guān)于Android最簡(jiǎn)單的限制輸入的實(shí)現(xiàn)方法,限制輸入框只能輸入數(shù)字、字母和符號(hào),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起看看 吧2018-11-11AndroidQ(10)黑暗模式適配的實(shí)現(xiàn)
這篇文章主要介紹了AndroidQ(10)黑暗模式適配的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-06-06Android ListView實(shí)現(xiàn)無(wú)限循環(huán)滾動(dòng)
這篇文章主要為大家詳細(xì)介紹了Android ListView實(shí)現(xiàn)無(wú)限循環(huán)滾動(dòng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-06-06Flutter開發(fā)setState能否在build中直接調(diào)用詳解
這篇文章主要為大家介紹了Flutter開發(fā)setState能否在build中直接調(diào)用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-10-10解決Android7.0更新后無(wú)法安裝的問(wèn)題
項(xiàng)目中發(fā)現(xiàn)在自動(dòng)更新功能的時(shí)候,下載好了apk的文件后在android7.0系統(tǒng)中不能自動(dòng)跳到安裝界面,后來(lái)搜索了一番解決了問(wèn)題,但感覺(jué)沒(méi)有描述清楚,所以補(bǔ)充一下。2017-12-12Android編程判斷網(wǎng)絡(luò)是否可用及調(diào)用系統(tǒng)設(shè)置項(xiàng)的方法
這篇文章主要介紹了Android編程判斷網(wǎng)絡(luò)是否可用及調(diào)用系統(tǒng)設(shè)置項(xiàng)的方法,涉及Android針對(duì)網(wǎng)絡(luò)連接的判定及屬性設(shè)置的調(diào)用,需要的朋友可以參考下2016-03-03Android 實(shí)現(xiàn)伸縮布局效果示例代碼
這篇文章主要介紹了Android 實(shí)現(xiàn)伸縮布局效果的示例代碼,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2017-01-01Android自定義滑動(dòng)刪除效果的實(shí)現(xiàn)代碼
這篇文章將從現(xiàn)有 Android 滑動(dòng)刪除的痛點(diǎn),到搭建好一個(gè)基本的框架,到最終提供一份完整的 Demo為止,爭(zhēng)取為讀者提供最大的可定制化,需要的朋友可以參考下2018-03-03