หายไปหลายวัน คราวนี้กลับมากันที่ Light Sensor กันต่อ สำหรับ Light Sensor จะเป็นคนละตัวกับ Proximity นะ จากบทความเก่า Proximity จะจับวัตถุที่มาบังเซนเซอร์ โดยใช้หลักการแสงอินฟราเรดสะท้อนวัตถุกลับมาตัวรับ

แต่สำหรับ Light Sensor จะใช้การวัดค่า Lux ของแสงที่วัด ซึ่งค่า Lux ก็คือหน่วยของความสว่างของแสงนั่นเอง โดยจะมีอยู่บนเครื่องที่สามารถปรับแสงจอออโต้ได้ จึงดูได้ง่ายๆเลยว่า ถ้าเครื่องไหนทำไม่ได้ก็แปลว่าไม่มี หรือสังเกตุได้จากช่องเดี่ยวที่อยู่ข้างหน้าฝั่งบนของจอ

เนื่องจาก Light Sensor ใช้วิธีวัดค่า Lux หรือความสว่างของแสง ดังนั้นค่าที่ได้จึงไม่เหมือน Proximity ที่มีแค่สองค่าคือ 0 กับ X (ขึ้นอยู่กับแต่ละเครื่อง) แต่ค่าจาก Light Sensor จะมีค่าต่างๆตามความสว่างของแสง

สำหรับการทำงานของคำสั่งหลักๆเจ้าของบล็อกจะไม่อธิบายนะ ให้ผู้ที่หลงเข้ามาอ่านเข้าไปอ่านจากบทความ Sensor API in Android — การใช้งาน Accelerometer แทน

ส่วนการใช้งานก็จะเปลี่ยนคำสั่งจากของเดิมเป็น โดยจะต่างจาก Accelerometer เพียงแค่ตอนกำหนดคลาส Sensor โดยเลือกเป็น Light Sensor แทน

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 กันเถอะ

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 แล้วนะ เพราะเคยอธิบายไปแล้ว ดังนั้นให้อ่านบทความ Sensor API in Android — การใช้งาน Accelerometer แทนนะ

<?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>


<?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 บนอุปกรณ์แอนดรอยด์นั้นเรียกใช้งานเหมือนๆกัน และถ้าต้องการดาวน์โหลดไฟล์ตัวอย่างของบทความนี้ก็สามารถดาวน์โหลดได้ที่