1. ACCELEROMETER 加速,描述加速度的。
2.GRAVITY 重力,這個在大家都知道。
3.GYROSCOPE 陀螺儀,對於物體跌落檢測更強大些,開發遊戲少了它會有點遺憾的,API Level 9新增的類型。
4. LIGHT 光線感應器,很多Android手機的螢幕亮度是根據這個感應器的數組自動調節的。
5. LINEAR_ACCELERATION 線性加速器,API Level 9新增的。
6. MAGNETIC_FIELD 磁極感應器。
7. ORIENTATION 方向感應器。
8. PRESSURE 壓力感應器。
9. PROXIMITY 距離感應器,對於通話後關閉螢幕背光很有用。
10. ROTATION_VECTOR 旋轉向量,Android 2.3新增的,如果我們過去處理映像會發現這個還是很有用的,不過這裡還是對遊戲開發起到輔助。
11. TEMPERATURE 溫度感應器,可以擷取手機的內部溫度,不過和周邊的有些差距,畢竟手機內部一般溫度比較高。
package com.HelloSensor; import java.util.List; import android.app.Activity; import android.content.Context; import android.hardware.Sensor; import android.hardware.SensorEvent; import android.hardware.SensorEventListener; import android.hardware.SensorManager; import android.os.Bundle; import android.widget.TextView; public class HelloSensor extends Activity { Sensor sensor ; private float x, y, z; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); //準備顯示資訊的UI組建 final TextView tx1 = (TextView) findViewById(R.id.TextView01); //從系統服務中獲得感應器管理器 SensorManager sm = (SensorManager) getSystemService(Context.SENSOR_SERVICE); //從感應器管理器中獲得全部的感應器列表 List<Sensor> allSensors = sm.getSensorList(Sensor.TYPE_ALL); //顯示有多少個感應器 tx1.setText("經檢測該手機有" + allSensors.size() + "個感應器,他們分別是:\n"); //顯示每個感應器的具體資訊 for (Sensor s : allSensors) { String tempString = "\n" + " 裝置名稱:" + s.getName() + "\n" + " 裝置版本:" + s.getVersion() + "\n" + " 供應商:" + s.getVendor() + "\n"; switch (s.getType()) { case Sensor.TYPE_ACCELEROMETER: tx1.setText(tx1.getText().toString() + s.getType() + " 加速度感應器accelerometer" + tempString); break; case Sensor.TYPE_GRAVITY: tx1.setText(tx1.getText().toString() + s.getType() + " 重力感應器gravity API 9" + tempString); break; case Sensor.TYPE_GYROSCOPE: tx1.setText(tx1.getText().toString() + s.getType() + " 陀螺儀感應器gyroscope" + tempString); break; case Sensor.TYPE_LIGHT: tx1.setText(tx1.getText().toString() + s.getType() + " 環境光線感應器light" + tempString); break; case Sensor.TYPE_LINEAR_ACCELERATION: tx1.setText(tx1.getText().toString() + s.getType() + " 線性加速器LINEAR_ACCELERATION API 9" + tempString); break; case Sensor.TYPE_MAGNETIC_FIELD: tx1.setText(tx1.getText().toString() + s.getType() + " 電磁場感應器magnetic field" + tempString); break; case Sensor.TYPE_ORIENTATION: tx1.setText(tx1.getText().toString() + s.getType() + " 方向感應器orientation" + tempString); break; case Sensor.TYPE_PRESSURE: tx1.setText(tx1.getText().toString() + s.getType() + " 壓力感應器pressure" + tempString); break; case Sensor.TYPE_PROXIMITY: tx1.setText(tx1.getText().toString() + s.getType() + " 距離感應器proximity" + tempString); break; case Sensor.TYPE_ROTATION_VECTOR: tx1.setText(tx1.getText().toString() + s.getType() + " 旋轉向量ROTATION" + tempString); break; case Sensor.TYPE_TEMPERATURE: tx1.setText(tx1.getText().toString() + s.getType() + " 溫度感應器temperature" + tempString); break; default: tx1.setText(tx1.getText().toString() + s.getType() + " 未知感應器" + tempString); break; } } //在title上顯示重力感應器的變化 sensor = sm.getDefaultSensor(Sensor.TYPE_ACCELEROMETER); SensorEventListener lsn = new SensorEventListener() { public void onSensorChanged(SensorEvent e) { x = e.values[SensorManager.DATA_X]; y = e.values[SensorManager.DATA_Y]; z = e.values[SensorManager.DATA_Z]; setTitle("x=" + (int) x + "," + "y=" + (int) y + "," + "z="+ (int) z); } public void onAccuracyChanged(Sensor s, int accuracy) { } }; // 註冊listener,第三個參數是檢測的精確度 sm.registerListener(lsn, sensor, SensorManager.SENSOR_DELAY_GAME); } }