Android編程之光線傳感器用法詳解
本文實(shí)例講述了Android編程之光線傳感器用法。分享給大家供大家參考,具體如下:
Android手機(jī)自帶光線傳感器,通常我們手機(jī)的屏幕自動亮度都是用光線傳感器來實(shí)現(xiàn)的。該傳感器在前置攝像頭附近,此外,還有一個(gè)距離傳感器。這里主要講解如何使用Android手機(jī)的光線傳感器。
獲得感應(yīng)器服務(wù)
Android開發(fā)中要使用光線傳感器,需要先獲得系統(tǒng)傳感器服務(wù)Context.SENSOR_SERVICE,獲得方法如下:
SensorManager senserManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
獲得光線傳感器
SensorManager是系統(tǒng)傳感器服務(wù),是系統(tǒng)所有傳感器的管理器。通過它,我們獲得制定類型的傳感器,獲得光線傳感器的方法如下:
Sensor sensor = senserManager.getDefaultSensor(Sensor.TYPE_LIGHT);
代碼中Sensor.TYPE_LIGHT是指光線傳感器。
Sensor中還有許多其他的傳感器,這里暫不討論。
編寫監(jiān)聽器
有了sensor對象之后,我們需要對該感應(yīng)器進(jìn)行監(jiān)聽,使用 SensorEventListener 接口,主要有onSensorChanged()和onAccuracyChanged()這兩個(gè)方法,代碼如下:
SensorEventListener listener = new SensorEventListener() {
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
//當(dāng)傳感器精度發(fā)生變化時(shí)
}
@Override
public void onSensorChanged(SensorEvent event) {
//當(dāng)傳感器監(jiān)測到的數(shù)值發(fā)生變化時(shí)
}
};
注冊監(jiān)聽器
接下來我們還需要調(diào)用SensorManager的registerListener()方法來注冊SensorEventListener才能使其生效,registerListener()方法包含三個(gè)參數(shù):SensorEventListener實(shí)例,Sensor的實(shí)例和傳感器輸出信息更新速率。
傳感器輸出信息更新速率有:
SENSOR_DELAY_UI
SENSOR_DELAY_NORMAL
SENSOR_DELAY_GAME
SENSOR_DELAY_FASTEST
總共四種值可選,它們的更新速率是依次遞增的。
注冊SensorEventListener的代碼如下:
senserManager.registerListener(listener, senser, SensorManager.SENSOR_ DELAY_NORMAL);
注銷監(jiān)聽器
最后,當(dāng)程序退出或傳感器使用完畢時(shí),一定要調(diào)用unregisterListener()方法將使用的資源釋放掉,如下所示:
sensorManager.unregisterListener(listener);
DEMO示例:
package com.test.sensor.light;
import android.app.Activity;
import android.content.Context;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.os.Bundle;
import android.widget.TextView;
public class MainActivity extends Activity {
//感應(yīng)器管理器
private SensorManager sensorManager;
//光線亮度
private TextView light;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//當(dāng)前Activity的內(nèi)容是一個(gè)TextView
light = new TextView(this);
setContentView(light);
//獲得感應(yīng)器服務(wù)
sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
//獲得光線感應(yīng)器
Sensor sensor = sensorManager.getDefaultSensor(Sensor.TYPE_LIGHT);
//注冊監(jiān)聽器
sensorManager.registerListener(listener, sensor, SensorManager. SENSOR_DELAY_NORMAL);
}
//Activity被銷毀
@Override
protected void onDestroy() {
super.onDestroy();
//注銷監(jiān)聽器
if (sensorManager != null) {
sensorManager.unregisterListener(listener);
}
}
//感應(yīng)器事件監(jiān)聽器
private SensorEventListener listener = new SensorEventListener() {
//當(dāng)感應(yīng)器精度發(fā)生變化
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
}
//當(dāng)傳感器監(jiān)測到的數(shù)值發(fā)生變化時(shí)
@Override
public void onSensorChanged(SensorEvent event) {
// values數(shù)組中第一個(gè)值就是當(dāng)前的光照強(qiáng)度
float value = event.values[0];
light.setText("當(dāng)前亮度 " + value + " lx(勒克斯)");
}
};
}
備注:開發(fā)使用光線傳感器無需聲明Android Manifest權(quán)限
另外,對于一些程序,在改變當(dāng)前程序屏幕亮度的時(shí)候,可以考慮加入光照傳感器的判斷。
因?yàn)榇蟛糠诌@些程序,會出現(xiàn)這樣的一個(gè)問題,當(dāng)(在非自動亮度調(diào)節(jié)模式)設(shè)定屏幕亮度為一個(gè)值時(shí),再設(shè)置為自動亮度調(diào)節(jié)模式的時(shí)候是無效的。
更多關(guān)于Android相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Android開發(fā)入門與進(jìn)階教程》、《Android視圖View技巧總結(jié)》、《Android編程之a(chǎn)ctivity操作技巧總結(jié)》、《Android操作SQLite數(shù)據(jù)庫技巧總結(jié)》、《Android操作json格式數(shù)據(jù)技巧總結(jié)》、《Android資源操作技巧匯總》及《Android控件用法總結(jié)》
希望本文所述對大家Android程序設(shè)計(jì)有所幫助。
- Android編程使用光線傳感器獲取光線強(qiáng)弱的方法【LightSensorManager封裝類】
- Android開發(fā)中方向傳感器定義與用法詳解【附指南針實(shí)現(xiàn)方法】
- Android開發(fā)中的重力傳感器用法實(shí)例詳解
- Android編程之方向傳感器用法示例
- Android編程中光線傳感器的調(diào)用方法詳解
- android 傳感器(OnSensorChanged)使用介紹
- Android利用方向傳感器獲得手機(jī)的相對角度實(shí)例說明
- Android 利用方向傳感器實(shí)現(xiàn)指南針具體步驟
- Android 傳感器--光照傳感器詳解及使用
- Android重力傳感器實(shí)現(xiàn)滾動的彈球
- Android操作系統(tǒng)介紹之11種傳感器
- Android編程基于距離傳感器控制手機(jī)屏幕熄滅的方法詳解
相關(guān)文章
Android不顯示開機(jī)向?qū)Ш烷_機(jī)氣泡問題
這篇文章主要介紹了Android不顯示開機(jī)向?qū)Ш烷_機(jī)氣泡問題,需要的朋友可以參考下2019-05-05
Android基準(zhǔn)配置文件Baseline?Profile方案提升啟動速度
這篇文章主要為大家介紹了Android基準(zhǔn)配置文件Baseline?Profile方案提升啟動速度示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-02-02
RecyclerView無限循環(huán)效果實(shí)現(xiàn)及示例解析
這篇文章主要為大家介紹了RecyclerView無限循環(huán)效果實(shí)現(xiàn)及示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-03-03
Android仿新浪微博發(fā)布微博界面設(shè)計(jì)(5)
這篇文章主要為大家詳細(xì)介紹了Android仿新浪微博發(fā)布微博界面設(shè)計(jì)方案,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-11-11
Android SeekBar實(shí)現(xiàn)滑動條效果
這篇文章主要為大家詳細(xì)介紹了Android SeekBar實(shí)現(xiàn)滑動條效果,可以改變并顯示當(dāng)前進(jìn)度的拖動,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-07-07
Android?中的?Timer?和?TimerTask詳解
Timer?是?Java?中用于創(chuàng)建定時(shí)任務(wù)的類,它位于?java.util?包中,可以使用Timer來安排一次性或定期執(zhí)行的任務(wù),這篇文章主要介紹了Android?的?Timer?和?TimerTask,需要的朋友可以參考下2024-05-05
Android觸摸事件如何實(shí)現(xiàn)筆觸畫布詳解
這篇文章主要給大家介紹了關(guān)于Android觸摸事件如何實(shí)現(xiàn)筆觸畫布的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2018-10-10

