這一片篇介紹如何讀手機上的光感測器,
Android有關於環境感測器資料擷取,包含環境溫度、光、壓力、濕度,以及裝置溫度感測器,如下表所列:
Sensor | Sensor event data | Units of measure | Data description |
---|---|---|---|
TYPE_AMBIENT_TEMPERATURE |
event.values[0] |
°C | Ambient air temperature. |
TYPE_LIGHT |
event.values[0] |
lx | Illuminance. |
TYPE_PRESSURE |
event.values[0] |
hPa or mbar | Ambient air pressure. |
TYPE_RELATIVE_HUMIDITY |
event.values[0] |
% | Ambient relative humidity. |
TYPE_TEMPERATURE |
event.values[0] |
°C | Device temperature.1 |
1 Implementations vary from device to device. This sensor was deprecated in Android 4.0 (API Level 14).
以下為取得光感測器的Android code:
package com.example.light_sensor;
import android.app.Activity;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.TextView;
public class LightSensorActivity extends Activity implements SensorEventListener{
private SensorManager mysensorManager;
private Sensor lsensor;
private TextView lsensor_lx;
private static final String TAG = "sensor";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_light_sensor);
lsensor_lx = (TextView)this.findViewById(R.id.ls_lx);
//Get an instance of the sensor service, and use that to get an instance of a particular sensor.
mysensorManager = (SensorManager)getSystemService(SENSOR_SERVICE);
lsensor = mysensorManager.getDefaultSensor(Sensor.TYPE_LIGHT);
}
@Override
public final void onAccuracyChanged(Sensor sensor, int accuracy) {
// Do something here if sensor accuracy changes.
}
@Override
public final void onSensorChanged(SensorEvent event) {
float light_value = event.values[0];
// Do something with this sensor data.
lsensor_lx.setText("Light:"+ String.valueOf(light_value)+"lux");
Log.i(TAG,"\n lux" + light_value);
}
@Override
protected void onResume() {
// Register a listener for the sensor.
super.onResume();
mysensorManager.registerListener(this, lsensor, SensorManager.SENSOR_DELAY_NORMAL);
}
@Override
protected void onPause() {
// Be sure to unregister the sensor when the activity pauses.
super.onPause();
mysensorManager.unregisterListener(this);
}
}
手機畫面:
參考資料:
1. https://developer.android.com/guide/topics/sensors/sensors_overview.html
2. https://developer.android.com/guide/topics/sensors/sensors_environment.html#sensors-using-temp
留言列表