安卓開發-感應器資訊採集

來源:互聯網
上載者:User

標籤:

 

表 1.. Android 平台支援的動作感應器。

參考API 文檔:http://developer.android.com/reference/android/hardware/Sensor.html#TYPE_GYROSCOPE

感應器 感應器事件數目據 說明 測量單位
TYPE_ACCELEROMETER SensorEvent.values[0] 沿 x 軸的加速度(包括重力)。 m/s2
SensorEvent.values[1] 沿 y 軸的加速度(包括重力)。
SensorEvent.values[2] 沿 Z 軸的加速度(包括重力)。
TYPE_GRAVITY SensorEvent.values[0] 沿 x 軸的重力加速度。 m/s2
SensorEvent.values[1] 沿 y 軸的重力加速度。
SensorEvent.values[2] 沿 Z 軸的重力加速度。
TYPE_GYROSCOPE SensorEvent.values[0] 圍繞 x 軸的旋轉角速度。 rad/s
SensorEvent.values[1] 圍繞 y 軸的旋轉角速度。
SensorEvent.values[2] 圍繞 Z 軸的旋轉角速度。
TYPE_LINEAR_ACCELERATION SensorEvent.values[0]] 沿 x 軸的加速度(不包括重力)。 m/s2
SensorEvent.values[1] 沿 y 軸的加速度(不包括重力)。
SensorEvent.values[2] 沿 Z 軸的加速度(不包括重力)。
TYPE_ROTATION_VECTOR SensorEvent.values[0]] 旋轉向量沿 x 軸的部分(x * sin(θ/2))。 無無
SensorEvent.values[1] 旋轉向量沿 y 軸的部分(y * sin(θ/2))。
SensorEvent.values[2]] 旋轉向量沿 Z 軸的部分(z * sin(θ/2))。
SensorEvent.values[3]] 旋轉向量的數值部分((cos(θ/2))1。

 

1 數值部分是可選的。

在Android2.3 gingerbread系統中,google提供了11種感應器供應用程式層使用。 

 1 #define SENSOR_TYPE_ACCELEROMETER       1 //加速度 2 #define SENSOR_TYPE_MAGNETIC_FIELD      2 //磁力 3 #define SENSOR_TYPE_ORIENTATION         3 //方向 4 #define SENSOR_TYPE_GYROSCOPE           4 //陀螺儀 5 #define SENSOR_TYPE_LIGHT               5 //光線感應 6 #define SENSOR_TYPE_PRESSURE            6 //壓力 7 #define SENSOR_TYPE_TEMPERATURE         7 //溫度 8 #define SENSOR_TYPE_PROXIMITY           8 //接近 9 #define SENSOR_TYPE_GRAVITY             9 //重力10 #define SENSOR_TYPE_LINEAR_ACCELERATION 10//線性加速度11 #define SENSOR_TYPE_ROTATION_VECTOR     11//旋轉向量

 

圖 1. 旋轉向量感應器的座標系。

關鍵類和介面

  1. Sensor
  2. SensorEvent
  3. SensorManager
  4. SensorEventListener

在Android中開發感應器十分簡單,只需下面三步:

1、調用Context的getSystemService(Context.SENSOR_SERVICE)方法獲得感應器管理服務(SensorManager)。

2、調用SensorManager的getDefaultSensor(int type)方法擷取指定類型的感應器。

3、一般在onResume()方法中調用SensorManager的registerListener(SensorEventListener listener,Sensor sensor,int rate)註冊監聽器.該方法三個參數說明如下:

listener:監聽感應器事件的監聽器。該監聽器需要實現SensorEventListener介面。

sensor:感應器對象。

rate:指定擷取感應器資料的頻率。支援以下幾種頻率值:

 

下面示範加速度感應器應用,分別以真機和模擬器兩種方式測試,兩種方式略有差別。

真機:

Activity:

[java] view plaincopy 
  1.  1 package com.home;   2    3 import android.app.Activity;   4 import android.content.Context;   5 import android.hardware.Sensor;   6 import android.hardware.SensorEvent;   7 import android.hardware.SensorEventListener;   8 import android.hardware.SensorManager;   9 import android.os.Bundle;  10 import android.widget.TextView;  11   12 public class AccelerometerActivity extends Activity implements  13         SensorEventListener {  14     // 定義系統的感應器管理服務  15     private SensorManager sensorManager;  16     private TextView showText;  17   18     @Override  19     protected void onCreate(Bundle savedInstanceState) {  20         super.onCreate(savedInstanceState);  21         setContentView(R.layout.main);  22         showText = (TextView) findViewById(R.id.main_tv_show);  23         // 擷取系統的感應器管理服務  24         sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);  25     }  26   27     @Override  28     protected void onResume() {  29         super.onResume();  30         // 為系統的加速度感應器註冊監聽器  31         sensorManager.registerListener(this,  32                 sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),  33                 SensorManager.SENSOR_DELAY_GAME);  34     }  35   36     @Override  37     protected void onStop() {  38         // 取消註冊  39         sensorManager.unregisterListener(this);  40         super.onStop();  41     }  42   43     // 當感應器精度改變時回調該方法  44     @Override  45     public void onAccuracyChanged(Sensor sensor, int accuracy) {  46     }  47   48     // 當感應器的值發生改變時回調該方法  49     @Override  50     public void onSensorChanged(SensorEvent event) {  51         if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) {  52             float[] values = event.values;  53             StringBuffer sb = new StringBuffer();  54             sb.append("X軸上的加速度:" + values[0] + "\n");  55             sb.append("Y軸上的加速度:" + values[1] + "\n");  56             sb.append("Z軸上的加速度:" + values[2] + "\n");  57             showText.setText(sb.toString());  58         }  59     }  60   61 }  

     

布局檔案只有一個TextView,在此省略。

 

安卓開發-感應器資訊採集

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.