Android常用感應器

來源:互聯網
上載者:User

在上文中介紹了加速度感應器,並以真機和模擬器兩種方式進行了測試。在本文中將介紹其餘幾種感應器,它們的處理方式完全一樣。這裡就只用真機進行測試了。 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;          }      }  }  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;@Overrideprotected 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);}@Overrideprotected 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);}@Overrideprotected void onPause() {super.onPause();// 程式暫停時取消註冊感應器監聽器mSensorManager.unregisterListener(this);}@Overridepublic void onAccuracyChanged(Sensor sensor, int accuracy) {}@Overridepublic 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>  <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>

 

  

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.