Andorid 风水罗盘简单实现
公司最近要開發關于風水的產品,產品需求說要做一個風水羅盤。接著UI就馬上出了幾張圖,然后我想了一下,羅盤應該是android 特有的傳感器,通過傳感器獲取一些動態數據,然后給與指針進行動態賦值,添加動畫。
上圖:
首先介紹一下,什么是傳感器。
1.什么是傳感器
維基百科是這樣定義的:傳感器是一種物理裝置或生物器官,能夠探測、感受外界的信號、物理條件(如光、熱、濕度)或化學組成(如煙霧),并將探知的信息傳遞給其他裝置或器官。
在Android中傳感器可以展示當前手機狀態的應用,包括硬件信息、當前位置、加速計、陀螺儀、光感、磁場、定向、電池窗臺,聲壓,同時還可以進行多點觸控的測試。只要你的想象力足夠豐富,完全可以利用這些信息做出一些很新奇得應用。
Android sensor framewrok允許你訪問多種類型的傳感器,這些傳感器有的基于硬件,有一些是基于軟件的。基于硬件的傳感器是內嵌到手機或者平板中的物理器件,它們的數據直接來源于測量特定的物理特性,如加速度,地球磁場強度,或角速度的變化。基于軟件的傳感器沒有物理元器件,它們是模仿基于硬件的傳感器工作的。基于軟件的傳感器從一個或更多的基于硬件的傳感器中獲取數據。有時候它們也被稱為虛擬傳感器或合成傳感器,線性加速度傳感器和重力傳感器就是基于軟件傳感器的例子。表1總結了Android平臺支持的傳感器。
一般的Android都不支持所有類型的傳感器。例如,大部分手機和平板都有一個加速傳感器和磁力傳感器,但是很少有擁有氣壓傳感器或者溫度傳感器。并且,一個設備可以擁有一種類型的不止一個的傳感器,如,一個設備擁有兩個重力傳感器,每個傳感器有不同的測量范圍。
傳感器種類
傳感器主要分三大類:
動作(Motion)傳感器
環境(Environmental)傳感器
位置(Position)傳感器
動作傳感器:
這類傳感器在三個軸(X、Y、Z)上測量加速度和旋轉角度。包括如下幾個傳感器
加速(accelerometer)傳感器
陀螺儀(gyroscope)傳感器
重力(gravity)傳感器
線性加速(linear acceleration)傳感器
旋轉向量(rotational vector)傳感器
環境傳感器
這類傳感器可以測量不同環境的參數,例如周圍環境的空氣溫度和壓強、光照強度和濕度。包括如下幾個傳感器
溫度(barometer)傳感器
光線(photometer)傳感器
溫度(thermometer)傳感器
壓力(pressure)傳感器
位置傳感器
這類傳感器可以測量設備的物理位置。包括如下幾個傳感器
方向(orientation)傳感器(數據來自加速傳感器和磁場傳感器)
磁場(magnetomenter)傳感器
傳感器類型名稱 傳感器類別 系統定義的傳感器常量 傳感器常量對應的數值
1. 加速度 TYPE_ACCELEROMETER SENSOR_TYPE_ACCELEROMETER 1
2. 磁力域 TYPE_MAGNETIC_FIELD SENSOR_TYPE_MAGNETIC_FIELD 2
3. 方向 TYPE_ORIENTATION SENSOR_TYPE_ORIENTATION 3
4. 陀螺 TYPE_GYROSCOPE SENSOR_TYPE_GYROSCOPE 4
5. 光線(亮度)TYPE_LIGHT SENSOR_TYPE_LIGHT 5
6. 壓力 TYPE_PRESSURE SENSOR_TYPE_PRESSURE 6
7. 溫度 TYPE_TEMPERATURE SENSOR_TYPE_TEMPERATURE 7
8. 臨近性 TYPE_PROXIMITY SENSOR_TYPE_PROXIMITY 8
以上傳感器只是部分,后面將用代碼獲取到手機所支持的傳感器類型。再此之前我們還需要了解ASF。
什么是ASF
所謂ASF就是Android SDK提供的Android sensor framework(Android傳感器框架),其作用是用來訪問當前Android設備內置的傳感器,幫助我們完成各種與傳感器有關的任務。例如
1、確定當前Android設備內置了哪些傳感器。
2、確定某一個傳感器的技術指標。例如該傳感器能測量的最大范圍、傳感器的制造商、對電量的要求、測量的精度等。
3、獲取傳感器傳回來的數據以及定義傳感器回傳的數據的精度。
4、注冊和注銷傳感器事件監聽器,這些監聽器用于監聽傳感器的變化,通常從傳感器回傳的數據需要利用這些監聽器完成。
ASF支持的傳感器:
TYPE_ACCELEROMETER //加速度傳感器(硬件) TYPE_MAGNETIC_FIELD //磁場傳感器(硬件) TYPE_ORIENTATION //方向傳感器(軟件傳感器,數據來自重力和磁場傳感器) TYPE_GYROSCOPE //陀螺儀傳感器(硬件) TYPE_LIGHT //光線傳感器(硬件) TYPE_PRESSURE //壓力傳感器(硬件) TYPE_PROXIMITY //臨近傳感器(硬件) TYPE_GRAVITY //重場傳感器(硬件或軟件) TYPE_LINEAR_ACCELERATION //線性加速度傳感器(硬件或軟件) TYPE_ROTATION_VECTOR //旋轉矢量傳感器(硬件或軟件) TYPE_RELATIVE_HUMIDITY //濕度傳感器(硬件) TYPE_AMBIENT_TEMPERATURE //溫度傳感器(硬件) TYPE_TEMPERATURE //溫度傳感器(硬件),從Android4.0開始被TYPE_AMBIENT_TEMPERATURE取代ASF的主要類和接口
SensorManager類:用于創建sensor service的實例。該類提供了很多用于訪問和枚舉傳感器、注冊和注銷傳感器監聽器的方法。而且還提供了與傳感器精度、掃描頻率、校正有關的常量。
Sensor類:提供了一些用于獲取傳感器技術參數的方法。如版本、類型、生產商等。
SensorEvent類:系統使用該類創建傳感器事件對象。該對象可以提供與傳感器事件相關的信息。傳感器事件對象包括的信息有:原始的傳感器回傳數據、傳感器類型、數據的精度以及觸發事件的時間。
SensorEventListener接口:該接口包含兩個回調方法,當傳感器的回傳值或精度發生變化時,系統會調用這兩個回調方法。
上代碼
1、得到SensorManager
sensorManager = (SensorManager) getProxyActivity().getBaseContext().getSystemService(Context.SENSOR_SERVICE);2、注冊傳感器
sensorManager.registerListener(this,sensorManager.getDefaultSensor(Sensor.TYPE_ORIENTATION),SensorManager.SENSOR_DELAY_GAME);3、實現接口,以及方法
implements SensorEventListener
4、注銷傳感器
@Overridepublic void onPause() {super.onPause();sensorManager.unregisterListener(this);}有什么疑問歡迎留言,一起討論。
總結
以上是生活随笔為你收集整理的Andorid 风水罗盘简单实现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 什么是TXT记录?如何设置、检测TXT记
- 下一篇: 今日闲谈:为何国产动画能在抖音异军突起?