光照傳感器

一、光照傳感器的用法


1. 獲取 SensorManager 實例。
SensorManager senserManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
2. 通過 getDefaultSensor() 得到某種傳感器的實例。
Sensor sensor = senserManager.getDefaultSensor(Sensor.TYPE_LIGHT);
3. 借助 SensorEventListener 對傳感器輸出的信號進行監(jiān)聽。
SensorEventListener listener = new SensorEventListener() {

    @Override
    public void onAccuracyChanged(Sensor sensor, int accuracy) {
    }

    @Override
    public void onSensorChanged(SensorEvent event) {
    }
};
  • 當傳感器的精度發(fā)生變化時就會調(diào)用 onAccuracyChanged() 方法。
  • 當傳感器監(jiān)測到的數(shù)值發(fā)生變化時就會調(diào)用 **onSensorChanged() **方法。
    **onSensorChanged() **方法中傳入了一個 SensorEvent 參數(shù),這個參數(shù)里又包含了一個 values 數(shù)組,所有傳感器輸出的信息都是存放在這里的。
4. 調(diào)用 SensorManager 的 registerListener() 方法來注冊SensorEventListener 使其生效。
senserManager.registerListener(listener, senser, SensorManager.SENSOR_DELAY_NORMAL);
  • 第一個參數(shù):SensorEventListener 的實例
  • 第二個參數(shù):Sensor 的實例
  • 第三個參數(shù):傳感器輸出信息的更新速率。以下更新速率是依次遞增。
  • SENSOR_DELAY_UI
  • SENSOR_DELAY_NORMAL
  • **SENSOR_DELAY_GAME **
  • **SENSOR_DELAY_FASTEST **
5. 最后調(diào)用 unregisterListener() 方法將使用的資源釋放掉。
sensorManager.unregisterListener(listener);

二、制作簡易光照傳感器


public class MainActivity extends Activity {
    private SensorManager sensorManager;
    private TextView lightLevel;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        lightLevel = (TextView) findViewById(R.id.light_level);
        sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
        Sensor sensor = sensorManager.getDefaultSensor(Sensor.TYPE_LIGHT);
        sensorManager.registerListener(listener, sensor, SensorManager.SENSOR_DELAY_NORMAL);
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        if (sensorManager != null) {
            sensorManager.unregisterListener(listener);
        }
    }

    private SensorEventListener listener = new SensorEventListener() {
        @Override
        public void onSensorChanged(SensorEvent event) {
            // values數(shù)組中第一個下標的值就是當前的光照強度
            float value = event.values[0];
            lightLevel.setText("Current light level is " + value + " lx");
        }

        @Override
        public void onAccuracyChanged(Sensor sensor, int accuracy) {
        }
    };
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內(nèi)容