Android傳感器編程經(jīng)驗(yàn)總結(jié)
Android手機(jī)操作系統(tǒng)是一款開源的操作系統(tǒng),可以讓用戶靈活的進(jìn)行編程來滿足自己的各種需求。那么在學(xué)習(xí)這一系統(tǒng)之前,先讓我們一起來了解一下Android傳感器的相關(guān)應(yīng)用。這兩天結(jié)合手機(jī)研究了下Android傳感器編程,現(xiàn)做一個(gè)小結(jié):#t#
1. Accelrator的x,y,z軸的正負(fù)向:
手機(jī)屏幕向上水平放置時(shí): (x,y,z) = (0, 0, -10) 而不是 (0, 0, 10)
當(dāng)手機(jī)頂部抬起時(shí): y減小,且為負(fù)值
當(dāng)手機(jī)底部抬起時(shí): y增加,且為正值
當(dāng)手機(jī)右側(cè)抬起時(shí): x減小,且為負(fù)值
當(dāng)手機(jī)左側(cè)抬起時(shí): x增加,且為正值
2. Accelrator的z軸的變化:
手機(jī)屏幕向上水平放置時(shí),z= -10
手機(jī)屏幕豎直放置時(shí), z= 0
手機(jī)屏幕向下水平放置時(shí),z= 10
3. 當(dāng)x變?yōu)?5時(shí), 手機(jī)畫面切換為豎向
當(dāng)x變?yōu)?5時(shí), 手機(jī)畫面切換為橫向
4. Android傳感器相關(guān)的類在SDK1.1和SDK1.5中不一樣,因此實(shí)現(xiàn)代碼也不一樣
5. Android傳感器類型分為:方向、加速表、光線、磁場、臨近性、溫度等
程序中分別為:
方向: SensorManager.SENSOR_ORIENTATION,
加速表: SensorManager.SENSOR_ACCELEROMETER
光線: SensorManager.SENSOR_LIGHT
磁場: SensorManager.SENSOR_MAGNETIC_FIELD
臨近性: SensorManager.SENSOR_PROXIMITY
溫度: SensorManager.SENSOR_TEMPERATURE
采樣率:最快、游戲、普通、用戶界面。當(dāng)應(yīng)用程序請求特定的采樣率時(shí),其實(shí)只是對Android傳感器子系統(tǒng)的一個(gè)提示,或者一個(gè)建議。不保證特定的采樣率可用。
最快: SensorManager.SENSOR_DELAY_FASTEST
游戲: SensorManager.SENSOR_DELAY_GAME
普通: SensorManager.SENSOR_DELAY_NORMAL
用戶界面: SensorManager.SENSOR_DELAY_UI
準(zhǔn)確性: 高、低、中、不可靠。
6. Orientation Sensor三個(gè)坐標(biāo)的含義:
values[0]:方位角(水平旋轉(zhuǎn)角),簡單的說就是手機(jī)的頭現(xiàn)在朝向哪個(gè)方位,0=北、90=東、180=南、270=西(可是好像不太準(zhǔn))
values[1]:縱向旋轉(zhuǎn)角,0=面朝上平置、-90=垂直向上、-180/180=面朝下平置、90=垂直向下
values[2]:橫向旋轉(zhuǎn)角,0=朝前、90=往右倒、-90=往左倒
7. 自動偵測手機(jī)方向
要讓手機(jī)自動旋轉(zhuǎn)的話,只要在AndroidManifest.xml裡面把ORIENTAION改成sensor就好,可是要讓Activity偵測到方向改變的話,要去抓Activity的Display:
- if (getWindowManager().getDefaultDisplay().getOrientation() == 0) {
- //Do some portrait
- } else {
- //Do some Landscape
要注意的是Android傳感器中的常數(shù)和ActivityInfo的不一樣,0是直的,1是橫的。然後因?yàn)槊看胃淖兾災(zāi)环较蚨紩l(fā)一連串的onPause, onDestory, onCreate,所以需要的處理全部寫在onCreate裡面就大功告成。