天天看點

Android開發_傳感器

Android中的傳感器類型

1.TYPE_ACCELEROMETER:加速度傳感器,機關是m/s²,測量應用于裝置X、Y、Z軸上的加速度,又叫做G-sensor

2.TYPE_AMBIENT_TEMPERATURE:溫度傳感器,機關是℃,測量傳回目前的溫度。

3.TYPE_GRAVITY:重力傳感器,機關是m/s²,測量應用于裝置X、Y、Z軸上的重力,也叫GV-sensor,地球上的數值是9.8m/s²。

4.TYPE_GYROSCOPE:陀螺儀傳感器,機關是rad/s,測量裝置x、y、z三軸的角加速度資料。

5.TYPE_LIGHT:光線感應傳感器,機關lx,檢測周圍的光線強度,手機系統中主要是調節LCD亮度。

6.TYPE_LINEAR_ACCELERATION:線性加速度傳感器,機關是m/s²,該傳感器是擷取加速度傳感器去除重力的影響得到的資料。

7.TYPE_MAGNETIC_FIELD:磁力傳感器,機關是uT(微特斯拉),測量裝置周圍三個實體軸(x,y,z)的磁場

8.TYPE_ORIENTATION:方向傳感器,測量裝置圍繞三個實體軸(x,y,z)的旋轉角度,API顯示使用 SensorManager.getOrientation()替代掉了。

9.TYPE_PRESSURE:壓力傳感器,機關是hPa(百帕斯卡),傳回目前環境下的壓強。

10.TYPE_PROXIMITY:距離傳感器,機關是cm,用來測量某個對象到螢幕的距離,可用于打電話時判斷人耳到電話螢幕距離來進行關閉螢幕的省電功能。

11.TYPE_RELATIVE_HUMIDITY:濕度傳感器,機關是%,來測量周圍環境的相對濕度。

12.TYPE_ROTATION_VECTOR:旋轉矢量傳感器,旋轉矢量代表裝置的方向,是一個将坐标軸和角度混合計算得到的資料。

13.TYPE_TEMPERATURE:溫度傳感器,新版本中被TYPE_AMBIENT_TEMPERATURE替換掉了。

Android傳感器相關類(位于android.hardware包)

Sensor: 表示傳感器的類,它儲存有傳感器名稱,廠商,版本,精确度等資訊;

SensorEvent:表示傳感器事件,它可以儲存傳感器的值,傳感器類型,時間戳等資訊;

SensorEventListener:用于接收傳感器來自SensorManager的通知,當傳感器發生變化時,它包含兩個回調函數。

SensorManager:SensorManager讓你可以通路裝置(手機)的全部傳感器。

SensorListener:已廢除,不再介紹。

Android的SensorEvent API定義的坐标系統是:X軸水準向右,Y軸垂直向上,Z軸沿螢幕向外。

列出所有的傳感器

public class MainActivity extends Activity {
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);

		SensorManager sm = (SensorManager) getSystemService(SENSOR_SERVICE);
		List<Sensor> sensors = sm.getSensorList(Sensor.TYPE_ALL);
		for (Sensor s : sensors) {
			System.out.println(s.getName());
		}
	}
}
           

運動傳感器

public class MotionSensorAcitivty extends Activity implements
		SensorEventListener {
	private SensorManager sm;
	private float[] gravity = new float[3];

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		sm = (SensorManager) getSystemService(SENSOR_SERVICE);
	}

	@Override
	public void onAccuracyChanged(Sensor s, int a) {

	}

	@Override
	public void onSensorChanged(SensorEvent se) {
		switch (se.sensor.getType()) {
		case Sensor.TYPE_ACCELEROMETER:
			float x = se.values[0];
			float y = se.values[1];
			float z = se.values[2];
			break;
		case Sensor.TYPE_GRAVITY:
			gravity[0] = se.values[0];
			gravity[0] = se.values[1];
			gravity[0] = se.values[2];
			break;
		default:
			break;
		}
	}

	@Override
	protected void onResume() {
		super.onResume();
		// 注冊傳感器
		sm.registerListener(this,
				sm.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),
				SensorManager.SENSOR_DELAY_UI);
		sm.registerListener(this, sm.getDefaultSensor(Sensor.TYPE_GRAVITY),
				SensorManager.SENSOR_DELAY_FASTEST);
	}

	@Override
	protected void onPause() {
		super.onPause();
		// 登出傳感器
		sm.unregisterListener(this);
	}
}
           

方向位置傳感器 

values[0]:繞Z軸旋轉的角度,手機正放時,Y軸正對北方,該值為0;Y軸正對南方,該值為180;

values[1]:繞X軸旋轉的角度,當Z軸正方向為Y軸正方向時,為正值,否則為負值,-180~180;

values[2]:繞Y軸旋轉的角度,當Z軸正方向為X軸正方向時,為正值,否則為負值,-180~180;