การเขียนโปรแกรม Sensor นั้น ทดลองบน Emulator ไม่ได้นะครับ เพราะว่า Emulator ไม่มี sensor ให้ทดลอง ดังนั้นวิธีการทดลองคือเอามาทดลองที่ เครื่องจริงเท่านั้นนะครับ
Sensor ต่างๆที่มีบน Android ซึ่งขึ้นอยู่กับแต่ละเครื่องว่ามีอะไรบ้าง บางเครื่องอาจจะไม่มีทั้งหมด ดังนั้นเวลาเขียนโปรแกรมไปใช้กับเครื่องไหนควรตรวจสอบก่อนว่าเครื่องที่เราจะเอาไปใช้นั้นรองรับ Sessor นั้นหรือป่าว
แล้ว Android มี Sensor อะไรบ้างละ โดยผมจะเขียนตาม TYPE ของ Sensor นะครับ
TYPE_ACCELEROMETER ตรวจวัดอัตราเร่ง หน่วยเป็น เมตร/วินาทียกกำลัง 2
TYPE_ALL เป็นค่าคงที่ที่แทนค่าของตัวตรวจจับทั้งหมด
TYPE_GYROSCOPE ตรวจวัดทิศทาง โดยอ้างอิงจากความเร็วเชิงมุม
TYPE_LIGHT ตรวจจับความเข้มแสง มีหน่วยเป็น lux
TYPE_MAGNETIC_FIELD ตรวจวัดอัตราความเข้มของสนามแม่เหล็ก (Micro-Tesla)
TYPE_PRESSURE ตรวจวัดแรงดันบรรยากาศ
TYPE_PROXIMITY ตรวจวัดระยะห่างของวัตถุกับตัวตรวจจับ (cm.)
TYPE_TEMPERATURE ตรวจวัดอุณหภูมิ หน่วยเป็นองศาเซลเซียส
TYPE_GRAVITY ตรวจวัดแรงดึงดูดของโลก
TYPE_ROTATION_VECTOR ตรวจสอบการหมุนของเวคเตอร์
แล้วก็อื่นๆดูได้ที่ http://developer.android.com/reference/ ... ensor.html
ต่อไปเป็นตัวอย่างโค้ด ตรวจสอบ Sensor ว่าเครื่องเรามี Sensor อะไรบ้าง
Sensorlist.java
โค้ด: เลือกทั้งหมด
package app.hw.sensor;
import java.util.HashMap;
import java.util.List;
import android.app.Activity;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.os.Bundle;
import android.widget.EditText;
import android.widget.TextView;
public class Sensorlist extends Activity implements SensorEventListener{
TextView tv;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.sensorlist);
EditText text = (EditText)findViewById(R.id.editText1);
SensorManager mgr = (SensorManager) this.getSystemService(SENSOR_SERVICE);
List<android.hardware.Sensor> sensors = mgr.getSensorList(android.hardware.Sensor.TYPE_ALL);
StringBuilder message = new StringBuilder(2048);
message.append("The sensors on this device are:\n");
for(android.hardware.Sensor sensor : sensors) {
message.append(sensor.getName() + "\n");
message.append(" Type: " + sensorTypes.get(sensor.getType()) + "\n");
message.append(" Vendor: " + sensor.getVendor() + "\n");
message.append(" Version: " + sensor.getVersion() + "\n");
message.append(" Resolution: " + sensor.getResolution() + "\n");
message.append(" Max Range: " + sensor.getMaximumRange() + "\n");
message.append(" Power: " + sensor.getPower() + " mA\n");
}
text.setText(message);
}
public void onAccuracyChanged(android.hardware.Sensor sensor, int accuracy) {
// TODO Auto-generated method stub
}
public void onSensorChanged(SensorEvent event) {
// TODO Auto-generated method stub
}
private HashMap<Integer, String> sensorTypes = new HashMap<Integer, String>();
{ // Initialize the map of sensor type values and names
sensorTypes.put(android.hardware.Sensor.TYPE_ACCELEROMETER, "TYPE_ACCELEROMETER"); // 1
sensorTypes.put(android.hardware.Sensor.TYPE_GYROSCOPE, "TYPE_GYROSCOPE"); // 4
sensorTypes.put(android.hardware.Sensor.TYPE_LIGHT, "TYPE_LIGHT"); // 5
sensorTypes.put(android.hardware.Sensor.TYPE_MAGNETIC_FIELD, "TYPE_MAGNETIC_FIELD"); // 2
sensorTypes.put(android.hardware.Sensor.TYPE_ORIENTATION, "TYPE_ORIENTATION"); // 3
sensorTypes.put(android.hardware.Sensor.TYPE_PRESSURE, "TYPE_PRESSURE"); // 6
sensorTypes.put(android.hardware.Sensor.TYPE_PROXIMITY, "TYPE_PROXIMITY"); // 8
sensorTypes.put(android.hardware.Sensor.TYPE_TEMPERATURE, "TYPE_TEMPERATURE"); // 7
sensorTypes.put(android.hardware.Sensor.TYPE_GRAVITY, "TYPE_GRAVITY"); // 9
sensorTypes.put(android.hardware.Sensor.TYPE_LINEAR_ACCELERATION,"TYPE_LINEAR_ACCELERATION"); // 10
sensorTypes.put(android.hardware.Sensor.TYPE_ROTATION_VECTOR,"TYPE_ROTATION_VECTOR"); // 11
}
}
โค้ด: เลือกทั้งหมด
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<EditText
android:id="@+id/editText1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="0.96"
android:enabled="false"
android:inputType="textMultiLine" android:gravity="top" android:fadeScrollbars="true" android:scrollbars="vertical"
>
</EditText>
</LinearLayout>