[Android] ตรวจสอบว่าเครื่องตัวเองใช้ Sensor อะไรได้บ้างด้วย SensorList

Mobile Application Developing- Android, iOS, Window Phone สอนเขียนโปรแกรมบนมือถือ ระบบปฏิบัติการต่าง แอนดรอยด์ ไอโอเอส วินโดโฟน สอนเขียนโปรแกรมบนมือถือ

Moderator: mindphp, ผู้ดูแลกระดาน

touleg
PHP Super Member
PHP Super Member
โพสต์: 480
ลงทะเบียนเมื่อ: 25/01/2010 11:57 pm
ติดต่อ:

[Android] ตรวจสอบว่าเครื่องตัวเองใช้ Sensor อะไรได้บ้างด้วย SensorList

โพสต์ที่ยังไม่ได้อ่าน โดย touleg »

ตรวจสอบว่าเครื่องตัวเองใช้ Sensor อะไรได้บ้างด้วย SensorList
การเขียนโปรแกรม 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
    }
}
sensorlist.xml

โค้ด: เลือกทั้งหมด

<?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>
ใครสงสัยตรงไหนสอบถามเพิ่มเติมได้นะครับ
แก้ไขล่าสุดโดย touleg เมื่อ 31/01/2012 3:39 pm, แก้ไขไปแล้ว 1 ครั้ง.
touleg
PHP Super Member
PHP Super Member
โพสต์: 480
ลงทะเบียนเมื่อ: 25/01/2010 11:57 pm
ติดต่อ:

Re: [Android] ตรวจสอบว่าเครื่องตัวเองใช้ Sensor อะไรได้บ้างด้วย SensorList

โพสต์ที่ยังไม่ได้อ่าน โดย touleg »

สำหรับใครที่ import android.hardware.Sensor; ใน Emulator แล้วใช้ไม่ได้

เช่นเวลาใช้งาน Sensor.TYPE_ORIENTATION
มันจะไม่มี TYPE ขึ้นมาให้ เช่น TYPE_ORIENTATION
แล้วตรงส่วนที่ import ไว้ก็ขึ้น Error อยู่

วิธีการแก้ไขคือ ลบ import ออกไปซะ แล้วเวลาใช้งานก็ใส่เข้าไปเต็มๆเลย แบบนี้

android.hardware.Sensor.TYPE_ACCELEROMETER

แต่ถ้าใครสามารถ import แล้วใช้ได้ก็ควรใช้แบบ import นะครับเวลาใช้มันจะเรียกสั้นๆ ดูแล้วสบายตากว่า แค่นี้ Sensor.TYPE_ACCELEROMETER
ตอบกลับโพส
  • Similar Topics
    ตอบกลับ
    แสดง
    โพสต์ล่าสุด

ผู้ใช้งานขณะนี้

สมาชิกกำลังดูบอร์ดนี้: ไม่มีสมาชิกใหม่ และบุคลทั่วไป 76