在上文中介紹了加速度傳感器,並以真機和模擬器兩種方式進行了測試。在本文中將介紹其餘幾種傳感器,它們的處理方式完全一樣。這裡就只用真機進行測試了。
1、方向傳感器:返回三個角度
第一個角度:表示手機頂部朝向與正北方的夾角。範圍0~360
第二個角度:表示手機頂部或尾部翹起的角度。範圍-180~180
第三個角度:表示手機左側或右側翹起的角度。範圍-90~90
2、磁場傳感器:返回三個數據,分別代表周圍磁場分解到X、Y、Z三個方向上的分量。
3、溫度傳感器:返回一個數據,表示手機設備周圍溫度。
4、光傳感器:返回一個數據,表示手機設備周圍的光的強度。
5、壓力傳感器:返回一個數據,表示手機設備周圍的壓力大小。
下面用一個簡單示例來演示它們的使用,代碼如下:
Activity:
- package com.home.sensor;
- import android.hardware.Sensor;
- import android.hardware.SensorEvent;
- import android.hardware.SensorEventListener;
- import android.hardware.SensorManager;
- import android.os.Bundle;
- import android.widget.EditText;
- import android.app.Activity;
- public class SensorTestActivity extends Activity implements SensorEventListener {
- // 定義真機的傳感器管理器
- private SensorManager mSensorManager;
- private EditText orientation;
- private EditText magnetic;
- private EditText temerature;
- private EditText light;
- private EditText pressure;
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super .onCreate(savedInstanceState);
- setContentView(R.layout.main);
- // 獲取界面上的EditText組件
- orientation = (EditText) findViewById(R.id.main_et_orientation);
- magnetic = (EditText) findViewById(R.id.main_et_magnetic);
- temerature = (EditText) findViewById(R.id.main_et_temerature);
- light = (EditText) findViewById(R.id.main_et_light);
- pressure = (EditText) findViewById(R.id.main_et_pressure);
- // 獲取真機的傳感器管理服務
- mSensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
- }
- @Override
- protected void onResume() {
- super .onResume();
- // 為系統的方向傳感器註冊監聽器
- mSensorManager.registerListener( this ,
- mSensorManager.getDefaultSensor(Sensor.TYPE_ORIENTATION),
- SensorManager.SENSOR_DELAY_GAME);
- // 為系統的磁場傳感器註冊監聽器
- mSensorManager.registerListener( this ,
- mSensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD),
- SensorManager.SENSOR_DELAY_GAME);
- // 為系統的溫度傳感器註冊監聽器
- mSensorManager.registerListener( this ,
- mSensorManager.getDefaultSensor(Sensor.TYPE_TEMPERATURE),
- SensorManager.SENSOR_DELAY_GAME);
- // 為系統的光傳感器註冊監聽器
- mSensorManager.registerListener( this ,
- mSensorManager.getDefaultSensor(Sensor.TYPE_LIGHT),
- SensorManager.SENSOR_DELAY_GAME);
- // 為系統的壓力傳感器註冊監聽器
- mSensorManager.registerListener( this ,
- mSensorManager.getDefaultSensor(Sensor.TYPE_PRESSURE),
- SensorManager.SENSOR_DELAY_GAME);
- }
- @Override
- protected void onPause() {
- super .onPause();
- // 程序暫停時取消註冊傳感器監聽器
- mSensorManager.unregisterListener( this );
- }
- @Override
- public void onAccuracyChanged(Sensor sensor, int accuracy) {
- }
- @Override
- public void onSensorChanged(SensorEvent event) {
- float [] values = event.values;
- StringBuffer sb = null ;
- switch (event.sensor.getType()) {
- // 方向傳感器
- case Sensor.TYPE_ORIENTATION:
- sb = new StringBuffer();
- sb.append( "繞Z軸轉過的角度:" + values[ 0 ]);
- sb.append( "\n繞X軸轉過的角度:" + values[ 1 ]);
- sb.append( "\n繞Y軸轉過的角度:" + values[ 2 ]);
- orientation.setText(sb.toString());
- break ;
- // 磁場傳感器
- case Sensor.TYPE_MAGNETIC_FIELD:
- sb = new StringBuffer();
- sb.append( "X方向上的磁場分量:" + values[ 0 ]);
- sb.append( "\nY方向上的磁場分量:" + values[ 1 ]);
- sb.append( "\nZ方向上的磁場分量:" + values[ 2 ]);
- magnetic.setText(sb.toString());
- break ;
- // 溫度傳感器
- case Sensor.TYPE_TEMPERATURE:
- sb = new StringBuffer();
- sb.append( "當前溫度為:" + values[ 0 ]);
- temerature.setText(sb.toString());
- break ;
- // 光傳感器
- case Sensor.TYPE_LIGHT:
- sb = new StringBuffer();
- sb.append( "當前光的強度:" + values[ 0 ]);
- light.setText(sb.toString());
- break ;
- // 壓力傳感器
- case Sensor.TYPE_PRESSURE:
- sb = new StringBuffer();
- sb.append( "當前壓力為:" + values[ 0 ]);
- pressure.setText(sb.toString());
- break ;
- }
- }
- }
佈局XML:
- < 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/main_et_orientation"
- android:layout_width = "match_parent"
- android:layout_height = "wrap_content"
- android:editable = "false" />
- < EditText
- android:id = "@+id/main_et_magnetic"
- android:layout_width = "match_parent"
- android:layout_height = "wrap_content"
- android:editable = "false" />
- < EditText
- android:id = "@+id/main_et_temerature"
- android:layout_width = "match_parent"
- android:layout_height = "wrap_content"
- android:editable = "false" />
- < EditText
- android:id = "@+id/main_et_light"
- android:layout_width = "match_parent"
- android:layout_height = "wrap_content"
- android:editable = "false" />
- < EditText
- android:id = "@+id/main_et_pressure"
- android:layout_width = "match_parent"
- android:layout_height = "wrap_content"
- android:editable = "false" />
- </ LinearLayout >
沒有留言:
張貼留言