Android sensor詳解

來源:互聯網
上載者:User

1.Sensor Type

重力感應/加速度感應器 (G-Sensor)

光感應   (Light-Sensor)

溫度感應

方向感應

磁場、

臨近性

2.如何?Sensor編程

a.擷取系統服務(SENSOR_SERVICE)返回一個SensorManager 對象

sensormanager = (SensorManager)getSystemSeriver(SENSOR_SERVICE);

b.通過SensorManager對象擷取相應的Sensor類型的對象

sensorObject = sensormanager.getDefaultSensor(sensor Type);

c.聲明一個SensorEventListener 對象用於偵聽Sensor 事件,並重載onSensorChanged方法

SensorEventListener sensorListener = new SensorEventListener(){

};

d.註冊相應的SensorService

sensormanager.registerListener(sensorListener, sensorObject, Sensor TYPE);

e.銷毀相應的SensorService

sensormanager.unregisterListener(sensorListener, sensorObject);

f: SensorListener 介面是感應器應用程式的中心。它包括兩個必需方法:

onSensorChanged(int sensor,float values[]) 方法在感應器值更改時調用。

該方法只對受此應用程式監視的感應器調用(更多內容見下文)。該方法的參數包括:一個整數,指示更改的感應器;一個浮點值數組,表示感應器資料本身。有些感應器只提供一個資料值,另一些則提供三個浮點值。方向和加速表感應器都提供三個資料值。

當感應器的準確性更改時,將調用 onAccuracyChanged(int sensor,int accuracy) 方法。參數包括兩個整數:一個表示感應器,另一個表示該感應器新的準確值。

3.關於G-Sensor

Android 加速度感應器的類型是 Sensor.TYPE_ACCELEROMETER

通過 android.hardware.SensorEvent 返回加速度感應器值。

加速度感應器傳回值的單位是加速度的單位 m/s^2(米每二次方秒),有三個方向的值分別是

values[0]: x-axis 方向加速度

values[1]: y-axis 方向加速度

values[2]: z-axis 方向加速度

其中x,y,z方向的定義是以水平放置在的手機的右下腳為參照系座標原點

  x 方向就是手機的水平方向,右為正

y 方向就是手機的水平垂直方向,前為正

y 方向就是手機的空間垂直方向,天空的方向為正,地球的方向為負

需要注意的是,由於地球固有的重力加速度g (值為9.8 m/s^2),

因此現實中實際加速度值應該是 z方向傳回值 - 9.8 m/s^2.

比如你以 2 m/s^2 的加速度將手機拋起,這時z方向的傳回值應該是 11.8 m/s^2.

反之若以手機以2 m/s^2 的加速度墜落,則z方向的傳回值應該是 7.8 m/s^2.

x,y方向則沒有上述限制。

本文上半部出處:http://blog.csdn.net/henry000/archive/2010/11/02/5980867.aspx

另外,G-sensor工作流程是什麼樣的呢?

1.使G-sensor正常工作需要做的事:

G-sensor driver檔案包括:

driver/i2c/chips/lis331dl.c

driver/i2c/chips/sensorioctl.h

include/linux/lis331dl.h

並在/kernel/arch/arm/mach-s3c6410/mach-ur6410.c檔案中i2c chanel1的結構變數i2c_devs1[] __initdata中需要添加G-sensor的裝置資訊,

尋找時會根據harware.c中定義好的sensor.*.so的副檔名的順序尋找,找到第一個匹配的時候即停止,並將該sensor.so中定義好的一個全域變數HAL_MODULE_INFO_SYM帶回。該變數包含的一個

重要訊息是它的一個成員結構變數中包含的一個函數指標open,該指標所指函數會對一個device結構變數賦值,從而帶出sensorService.cpp 和sensorManager.cpp與sensor通訊所需要的全部資訊。

device結構變數有兩種變體分別供sensorService.cpp和sensorManaer.cpp使用。其中主要是一些函數指標指向與sensor通訊的函數。

sensorService.cpp和sensorManager.cpp在得到HAL_MODULE_INFO_SYM結構後都會調用 sensors.h的inline函數open()通過HAL_MODULE_INFO_SYM的open函數指標將所需的device資訊取回。

系統在啟動activityManager.java時,它會啟動sensorManager.java,它也會調用hardware.c中的方法hw_get_module()帶回HAL_MODULE_INFO_SYM。

查看本欄目更多精彩內容:http://www.bianceng.cnhttp://www.bianceng.cn/OS/extra/

聯繫我們

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