編輯:關於android開發
本節教程主要講解Android傳感器編程的基礎知識,包括加速度傳感器(accelerometer)、陀螺儀(gyroscope)、環境光照傳感器(light)、磁力傳感器(magnetic field)、方向傳感器(orientation)、壓力傳感器(pressure)、距離傳感器(proximity)和溫度傳感器(temperature)。
一、前言
我很喜歡電腦,可是筆記本還是太大,筆記本電腦再小還是要弄個小包背起來的,智能手機則不同,它完全就是一個手機,可以隨意裝在一個口袋裡隨身攜帶。因此我在2002年左右時最喜歡玩裝備是Dell的PDA,2007年的時候最喜歡玩的是N73,而在2010年最喜歡玩的則是Milestone。眼見著手機的功能越來越強,時至今日智能手機甚至在某些方面已經強過了台式機和筆記本。本節課講的就是智能手機強過台式機和筆記本的地方:傳感器。
2008年的時候我很喜歡我的小白筆記本Macbook,喜歡玩它的一個小軟件,一拍桌子,筆記本感受到了震動,它就轉換了一個桌面出來,這讓我像個小孩子一樣沒事就拍拍桌子。這一功能這得益於蘋果筆記本內置有傳感器。
我不知道iPhone手機是不是第一個把各種各樣的傳感器運用在手機上的,不過我知道iPhone是把傳感器運用在手機上最成功的第一個。隨後的Android系統也內置了大量的傳感器,這讓Android系統手機和普通的諾基亞智能機和Windows CE智能機相比牛氣了許多,在擁有了Milestone之後,我的N73就被仍在抽屜的角落裡了。
從Android1.5開始,系統內置了對多達八種傳感器的支持,他們分別是:加速度傳感器(accelerometer)、陀螺儀(gyroscope)、環境光照傳感器(light)、磁力傳感器(magnetic field)、方向傳感器(orientation)、壓力傳感器(pressure)、距離傳感器(proximity)和溫度傳感器(temperature)。
利用這些傳感器我們可以制作出各種有趣的應用程序和游戲。譬如在口袋裡晃一晃手機,手機就開始神不知鬼不覺的錄音,不要著急這個很容易做,我們在本文的結尾就一起制作這個小應用。
本講的學習方式還是在實戰中學習,需要提醒的是模擬器中無法模擬傳感器,因此你需要准備一款Android真機才能運行本講的例子。
二、實例:手機傳感器清單
我們還是先看程序後解釋。
1、創建一個項目 Lesson37_HelloSensor ,主Activity名字叫 mainActivity.java。
2、UI布局文件main.xml的內容如下:
XML/HTML代碼3、mainActivity.java的內容如下:
Java代碼4、連接真機Milestone,編譯並運行程序,顯示結果如下:
5、結合上面的程序我們做一些解釋。
1)Android所有的傳感器都歸傳感器管理器 SensorManager 管理,獲取傳感器管理器的方法很簡單:
String service_name = Context.SENSOR_SERVICE;
SensorManager sensorManager = (SensorManager)getSystemService(service_name);
2)現階段Android支持的傳感器有8種,它們分別是:
傳感器類型常量 內部整數值 中文名稱 Sensor.TYPE_ACCELEROMETER 1 加速度傳感器 Sensor.TYPE_MAGNETIC_FIELD 2 磁力傳感器 Sensor.TYPE_ORIENTATION 3 方向傳感器 Sensor.TYPE_GYROSCOPE 4 陀螺儀傳感器 Sensor.TYPE_LIGHT 5 環境光照傳感器 Sensor.TYPE_PRESSURE 6 壓力傳感器 Sensor.TYPE_TEMPERATURE 7 溫度傳感器 Sensor.TYPE_PROXIMITY 8 距離傳感器3)從傳感器管理器中獲取其中某個或者某些傳感器的方法有如下三種:
第一種:獲取某種傳感器的默認傳感器
Sensor defaultGyroscope = sensorManager.getDefaultSensor(Sensor.TYPE_GYROSCOPE);
第二種:獲取某種傳感器的列表
List<Sensor> pressureSensors = sensorManager.getSensorList(Sensor.TYPE_PRESSURE);
第三種:獲取所有傳感器的列表,我們這個例子就用的第三種
List<Sensor> allSensors = sensorManager.getSensorList(Sensor.TYPE_ALL);
4)對於某一個傳感器,它的一些具體信息的獲取方法可以見下表:
方法 描述 getMaximumRange() 最大取值范圍 getName() 設備名稱 getPower() 功率 getResolution() 精度 getType() 傳感器類型 getVentor() 設備供應商 getVersion() 設備版本號三、實例:窈窈錄音器
通過上面的例子我們學會了如何獲得某種類型的傳感器,下面我通過一個實例來學會如何使用某一個類型的傳感器。我們這裡使用加速度傳感器來實現這樣一個功能:開啟我們的錄音程序放在你的口袋或者提包裡,需要錄音的時候把衣服整理一下,或者把提包挪動個位置,那麼此時手機就會感受到變化從而開始錄音。由此達到神不知鬼不覺的錄音效果。說起來似乎有點神,其實做起來很簡單,讓我們開始吧。
簡單的錄音程序已經在第28講的時候做過了,我們在28講程序的基礎上寫本講的代碼。
1、新建一個項目 Lesson37_YYRecorder ,主文件叫 MainActivity.java ,具體信息都可以參見第二十八講的“窈窈錄音”的例子。
2、這裡只貼出於28講不同的 MainActivity.java 的代碼,請注意看注釋:
Java代碼3、連接真機Milestone,編譯並運行程序:
晃動機器,開始錄音。
查看錄音文件,效果還可以:
4、我們小結一下:到Android2.2版本為止,系統並沒有給開發者提供多少可用的包裝好的傳感器信息,只是提供了傳感器發出的原始數據,這些原始數據存放在 event.values 的數組裡,開發人員需要從這些裸數據總自行發掘有用的信息,譬如從加速度傳感器的3維裸數據中獲得搖動的判斷(我的搖動判斷很弱智,有時間再改吧……)。好了本講就先到這裡,關於傳感器有機會我們展開再談,下次再見吧。
Android之Fragment靜態加載 1、Fragment知識概要 Android3.0引入了Fragment,主要目的是用在大屏幕設備上,支持更加動態和靈活的UI設
我們為什麼要在Android中使用RxJava 感覺RxJava最近風生水起,不學習一下都不好意思了,灑家也是初學RxJava,也是感覺代碼好像更復雜更難懂了,看了一
單機搭建Android開發環境(三),單機搭建android開發單機搭建Android開發環境,第一篇重點介紹了如何優化Windows 7系統,以提高開發主機的性能並延長
Android應用一般上架流程 Android App上架所需文件 上架准備 App文件: 1.安裝包 2.應用商標:圖片格式PNG,大小512*512,小於800KB。