Android常用傳感器
在本文中將介紹其余幾種傳感器,它們的處理方式完全一樣。這里就只用真機進行測試了。
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; } } } </pre>布局XML:<pre class="brush:xml; toolbar: true; auto-links: false;"> <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> </pre> <p></p>
本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!