แต่สำหรับ Light Sensor จะใช้การวัดค่า Lux ของแสงที่วัด ซึ่งค่า Lux ก็คือหน่วยของความสว่างของแสงนั่นเอง โดยจะมีอยู่บนเครื่องที่สามารถปรับแสงจอออโต้ได้ จึงดูได้ง่ายๆเลยว่า ถ้าเครื่องไหนทำไม่ได้ก็แปลว่าไม่มี หรือสังเกตุได้จากช่องเดี่ยวที่อยู่ข้างหน้าฝั่งบนของจอ
เนื่องจาก Light Sensor ใช้วิธีวัดค่า Lux หรือความสว่างของแสง ดังนั้นค่าที่ได้จึงไม่เหมือน Proximity ที่มีแค่สองค่าคือ 0 กับ X (ขึ้นอยู่กับแต่ละเครื่อง) แต่ค่าจาก Light Sensor จะมีค่าต่างๆตามความสว่างของแสง
สำหรับการทำงานของคำสั่งหลักๆเจ้าของบล็อกจะไม่อธิบายนะ ให้ผู้ที่หลงเข้ามาอ่านเข้าไปอ่านจากบทความ [Android Code] การใช้งาน Accelerometer แทน
SensorManager sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
Sensor sensor = sensorManager.getDefaultSensor(Sensor.TYPE_LIGHT);
ส่วนคำสั่งอื่นๆ ทั้งหมดก็จะเหมือนกับ Accelerometer แต่จะต่างกันตรงที่ว่าค่าที่อ่านได้มีแค่ค่าเดียวเท่านั้น ซึ่งต่างจาก Accelerometer ที่อ่านเป็น XYZ เพราะงั้น Float Array จึงมีสมาชิก 3 ตัว (ตัวที่ 0 1 และ 2) แต่สำหรับ Light Sensor นั้น ค่า Float Array ที่ได้จะมีแค่สมาชิก 1 ตัว (ตัวที่ 0)
ทีนี้ก็มาดูตัวอย่างสำหรับการใช้งาน Light Sensor กันเถอะ
Main.java
package app.akexorcist.sensor_light;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.os.Bundle;
import android.app.Activity;
import android.content.Context;
import android.widget.TextView;
public class Main extends Activity {
TextView textLight;
SensorManager sensorManager;
Sensor sensor;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
sensor = sensorManager.getDefaultSensor(Sensor.TYPE_LIGHT);
textLight = (TextView) findViewById(R.id.textLight);
}
public void onResume() {
super.onResume();
sensorManager.registerListener(lightListener, sensor,SensorManager.SENSOR_DELAY_NORMAL);
}
public void onStop() {
super.onStop();
sensorManager.unregisterListener(lightListener);
}
public SensorEventListener lightListener = new SensorEventListener() {
public void onAccuracyChanged(Sensor sensor, int acc) { }
public void onSensorChanged(SensorEvent event) {
float x = event.values[0];
textLight.setText((int)x + " lux");
}
};
}
เจ้าของบล็อกไม่อธิบายซ้ำใน Main.java แล้วนะ เพราะเคยอธิบายไปแล้ว ดังนั้นให้อ่านบทความ [Android Code] การใช้งาน Accelerometer แทนนะ
main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center" >
<TextView
android:id="@+id/textLight"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="30sp"
android:text="" />
</LinearLayout>
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="app.akexorcist.sensor_light"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="8" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="app.akexorcist.sensor_light.Main"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
สำหรับหลักการใช้งาน Light Sensor จะเห็นว่าไม่มีอะไรยาก เพียงแค่ผู้ที่หลงเข้ามาอ่านนั้นเข้าใจการใช้งาน Accelerometer เพราะว่า Sensor บนอุปกรณ์แอนดรอยด์นั้นเรียกใช้งานเหมือนๆกัน และถ้าต้องการดาวน์โหลดไฟล์ตัวอย่างของบทความนี้ก็สามารถดาวน์โหลดได้ที่