Android 之傳感器

作者ivm

參考文章:http://blog.csdn.net/wenzhi20102321/article/details/53282313

Demo?下載地址https://github.com/changer0/WeiChatShake

引言:在開發(fā)時,搖一搖這個需求是必不可少的,一般開發(fā)是很少用到的傳感器的,今天就為大家掃掃盲,最后在一起做一個搖一搖的Demo?

傳感器的分類:

一、動作傳感器:

加速度傳感器

陀螺儀傳感器

重力傳感器

線性加速傳感器

旋轉向量傳感器

二、位置傳感器:

臨近物體傳感器

方向傳感器

磁場傳感器

三、環(huán)境傳感器

溫度傳感器

光傳感器

壓力傳感器

四、新增傳感器

心率傳感器

哇,是不是很多啊,其中有些傳感器還是挺常用的,比如方向傳感器,重力傳感器

那傳感器到底怎么實現(xiàn)呢,它難不難呢??

首先我很負責的說,它功能實現(xiàn)不難,我們會很容易的就使用它,但是高級傳感器的應用還是有難度的

如何實現(xiàn)傳感器?

1.聲明Sensor,SensorManager

聲明

2.在?onCreate 初始化SensorManager ,Sensor

初始化

Sensor 對象可以獲取信息的方法有如下:

1. getMaximumRange() 最大取值范圍

2. getName() 設備名稱

3. getPower() 功率

4. getResolution() 精度

5. getType() 傳感器類型

6. getVentor() 設備供應商

7. getVersion() 設備版本號

3.傳感器都是需要注冊和解除注冊的,一般我們在onResume , onPause 注冊 和解除注冊

onresume
onPause

注冊時的參數(shù)含義:

第一個參數(shù)為傳感器監(jiān)聽

第二個參數(shù)為當前注冊的傳感器

第三個參數(shù)是延遲時間的精密度,

精密度可選擇的值

1.SensorManager.SENSOR_DELAY_FASTEST 0ms

2.SensorManager.SENSOR_DELAY_GAME 20ms

3.SensorManager.SENSOR_DELAY_UI 60ms

4.SensorManager.SENSOR_DELAY_NORMAL 200ms

注意

要實現(xiàn)接口

SenSorEventListener 可以在Activity 實現(xiàn),也可以內部類實現(xiàn),但是都會有這兩個方法

回調接口

onSensorChanged 當傳感器數(shù)值發(fā)生改變時調用,onAccuracyChanged 當傳感器的精度發(fā)生變化時調用。其中onSensorChanged 是我們常常改寫的方法。它提供一個SensorEvent 對象通過這個對象我可以獲取很多數(shù)據(jù)。

注:不同的傳感器的區(qū)別在于

1.Sensor 實例化時

Sensor

2.onSensorChanged,onAccuracyChanged 這兩個回調方法會有些區(qū)別。

不同傳感器的區(qū)別:

1.動作傳感器的回傳數(shù)據(jù)

所有的動作傳感器都會返回三個浮點數(shù)的值(通過長度為3的數(shù)組返回),但對于不同的傳感器,這三個只的意義不同。例如,對于加速傳感器,會返回三個坐標軸的數(shù)據(jù)[。對于陀螺儀傳感器,會返回三個坐標軸的旋轉角速度。

應用:動作傳感器 搖一搖

2.方向傳感器

方向傳感器有三個方向的屬性值。

1)SensorEvent.values[0]: 繞著Z軸旋轉的角度。如果Y軸(正常拿手機的方向)正對著北方,該值是0,如果Y軸指向南 方,改值是180,Y軸指向東方,該值是90,如果Y軸指向西方,該值是270。

2)SensorEvent.values[1]: 繞著X軸旋轉的度數(shù)。當從Z軸正方向朝向Y軸正方向,改值為正值。反之,為負值。該值在 180至-180之間變動。

3)ensorEvent.values[2]:繞著Y軸旋轉的度數(shù)。從Z軸正方向朝向X軸正方向,改值為正值。反之,為負值。該值在180至-180之間變動。 應用:方向傳感器_指南針

3.磁場傳感器(這個傳感器一般開發(fā)不會用到! )

SensorEvent.values[0]: 沿著X軸的磁(μT,millitesla) SensorEvent.values[1]: 沿著Y軸的磁(μT,millitesla) SensorEvent.values[2]: 沿著Z軸的磁(μT,millitesla)

4.鄰近傳感器

這里只返回一個參數(shù) SensorEvent.values[0]:手機正面距離鄰近物理的距離(CM)

應用:手機接電話時屏幕熄屏

5.光線傳感器的一些值的標準

最強的光線強度(估計只有沙漠地帶才能達到這個值)

public static final float LIGHT_SUNLIGHT_MAX = 120000.0f;

萬里無云時陽光直射的強度

public static final float LIGHT_SUNLIGHT = 110000.0f;

有陽光,但被云彩抵消了部分光線時的強度

public static final float LIGHT_SHADE = 20000.0f; 多云時的光線強度

public static final float LIGHT_OVERCAST = 10000.0f;

太陽剛剛升起時(日出)的光線強度

public static final float LIGHT_SUNRISE = 400.0f;

在陰雨天,沒有太陽時的光線強度

public static final float LIGHT_CLOUDY = 100.0f;

夜晚有月亮時的光線強度

public static final float LIGHT_FULLMOON = 0.25f;

夜晚沒有月亮時的光線強度(當然,也不能有路燈,就是漆黑一片)

public static final float LIGHT_NO_MOON = 0.001f;

最后我們來一個完整的Demo

大體邏輯:獲取加速度傳感器,在搖的時候handler 發(fā)一次消息 ,(震動一次,執(zhí)行動畫圖片分開,分開時顯示橫線,聲音響),看搖一搖的動畫多長(假設500ms),在500ms 后在發(fā)一次消息,(震動一次,執(zhí)行動畫,圖片回來,隱藏橫線)

1.準備階段

bottom
up
line_up
line_bottom

在加上一段 搖一搖的聲音

2.添加權限

權限

3.初始化

初始化1
初始化2
初始化3
初始化4

4.重寫Sensor 回調方法(關鍵)

回調方法1
回調方法2

5.handler 實現(xiàn)

handler 實現(xiàn)
handler 實現(xiàn)2

6.動畫實現(xiàn)

動畫實現(xiàn)1
動畫實現(xiàn)2
動畫實現(xiàn)3
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容