您好,歡迎來(lái)電子發(fā)燒友網(wǎng)! ,新用戶?[免費(fèi)注冊(cè)]

您的位置:電子發(fā)燒友網(wǎng)>電子元器件>傳感器>

android開發(fā)筆記之高級(jí)主題—磁傳感器的簡(jiǎn)單介紹

2018年10月07日 15:40 網(wǎng)絡(luò)整理 作者:工程師譚軍 用戶評(píng)論(0
?
  磁傳感器是把磁場(chǎng)、電流、應(yīng)力應(yīng)變、溫度、光等外界因素引起敏感元件磁性能變化轉(zhuǎn)換成電信號(hào),以這種方式來(lái)檢測(cè)相應(yīng)物理量的器件。
?
  磁傳感器廣泛用于現(xiàn)代工業(yè)電子產(chǎn)品中以感應(yīng)磁場(chǎng)強(qiáng)度來(lái)測(cè)量電流、位置、方向等物理參數(shù)。在現(xiàn)有技術(shù)中,有許多不同類型的傳感器用于測(cè)量磁場(chǎng)和其他參數(shù)。
?
  磁傳感器是把磁場(chǎng)、電流、應(yīng)力應(yīng)變、溫度、光等外界因素引起敏感元件磁性能變化轉(zhuǎn)換成電信號(hào),以這種方式來(lái)檢測(cè)相應(yīng)物理量的器件。磁傳感器分為三類:指南針、磁場(chǎng)感應(yīng)器、位置傳感器。指南針:地球會(huì)產(chǎn)生磁場(chǎng),如果你能測(cè)地球表面磁場(chǎng)就可以做指南針。電流傳感器:電流傳感器也是磁場(chǎng)傳感器。電流傳感器可以用在家用電器、智能電網(wǎng)、電動(dòng)車、風(fēng)力發(fā)電等等。位置傳感器: 如果一個(gè)磁體和磁傳感器相互之間有位置變化,這個(gè)位置變化是線性的就是線性傳感器,如果轉(zhuǎn)動(dòng)的就是轉(zhuǎn)動(dòng)傳感器。
?
  大生活中用到很多磁傳感器,比如說(shuō)指南針,電腦硬盤、家用電器等等。
?
  在傳統(tǒng)產(chǎn)業(yè)改造中的應(yīng)用及市場(chǎng)
?
  據(jù)報(bào)道,1995年僅工業(yè)過(guò)程控制傳感器的全球市場(chǎng)已達(dá)到260億美元;2001年計(jì)算機(jī)HDD用SV-GMR磁頭的市場(chǎng)超過(guò)了4000億日元(約合34億美元)。若采用新型微型磁傳感器,既使操作更簡(jiǎn)便,又提高了可靠性,增長(zhǎng)了器件壽命,降低了成本。
?
  使用新型磁傳感器可以顯著提高測(cè)量和控制精度,如使用GMI(巨磁阻抗)磁場(chǎng)傳感器,檢測(cè)分辨率和常用磁通門磁強(qiáng)計(jì)一樣,而響應(yīng)速度卻快了一倍,消耗功率僅為后者的1%;若用霍爾器件,其分辨率僅4A/m,而所需外場(chǎng)比前者高300余倍;在應(yīng)力檢測(cè)中,SI 傳感器的靈敏度是常用電阻絲的2000倍高,是半導(dǎo)體應(yīng)變規(guī)的20~40倍。工業(yè)機(jī)床的油壓或氣壓汽缸活塞位置檢測(cè),廣泛采用套在活塞桿上的永磁環(huán)和AMR元件組成的磁傳感器,檢測(cè)精度達(dá)0.1mm,檢測(cè)速度可在0~500mm/s內(nèi)以高低速度變換;改用GMI或SV-GMR傳感器后,測(cè)量精度至少可以提高1個(gè)數(shù)量級(jí)。在機(jī)床數(shù)控化時(shí)代,數(shù)字磁尺幫助設(shè)計(jì)師們實(shí)現(xiàn)了閉環(huán)控制。使用絕對(duì)信號(hào)輸出的磁尺,則不受噪聲、電源電壓波動(dòng)等干擾,也不必原點(diǎn)復(fù)位。使用工作狀態(tài)磁敏開關(guān),還可以完成手動(dòng)與數(shù)控之間的轉(zhuǎn)換。
?
  旋轉(zhuǎn)磁編碼器在旋轉(zhuǎn)量的檢測(cè)控制中起關(guān)鍵作用,它在數(shù)控機(jī)床、機(jī)器人、工廠自動(dòng)化設(shè)備的位置檢測(cè)、傳輸速度控制,磁盤、打印機(jī)之類的自動(dòng)化設(shè)備通訊設(shè)備的旋轉(zhuǎn)量檢測(cè)中都是不可缺少的重要部件。其檢測(cè)對(duì)象是光磁圖形,不受油霧粉塵的影響,因此比目前最先進(jìn)的光編碼器的可靠性高壽命長(zhǎng),尤其適合于自動(dòng)焊接、油漆機(jī)器人和與鋼鐵有關(guān)的位置檢測(cè)以及各種金屬、木材、塑料等加工行業(yè)的應(yīng)用。而仍大量使用光編碼器,由于這種器件易受粉塵、油污和煙霧的影響,用在自動(dòng)焊接、油漆機(jī)器人、紡織和鋼鐵、木料、塑料等的加工中,可靠性極差。應(yīng)用AMR、GMR 、GMI敏感元件構(gòu)成的旋轉(zhuǎn)磁編碼器,就不存在上述缺點(diǎn),因此,它們的市場(chǎng)需求年增長(zhǎng)率在30%以上。在家用電器和節(jié)能產(chǎn)品中也也有其廣泛的應(yīng)用潛力,在節(jié)能環(huán)保產(chǎn)品中也大有用武之地。若使用微型磁編碼器和控制微機(jī)一體化,更有利于簡(jiǎn)化控制系統(tǒng)結(jié)構(gòu),減少元件數(shù)和占空體積,這在精密制造和加工業(yè)中意義十分重大。
?
  在環(huán)境監(jiān)測(cè)中的應(yīng)用
?
  環(huán)境保護(hù)的前提是對(duì)各個(gè)環(huán)境參數(shù)(溫度、氣壓、大氣成份、噪聲。..。..。)的監(jiān)測(cè),這里需要使用多種大量的傳感器。采用強(qiáng)磁致伸縮非晶磁彈微型磁傳感器,可以同時(shí)測(cè)量真空或密閉空間的溫度和氣壓,而且不用接插件,可以遙測(cè)和遠(yuǎn)距離訪問(wèn)。在食品包裝、環(huán)境科學(xué)實(shí)驗(yàn)等方面,應(yīng)用前景廣闊。
?
  在交通管制中的應(yīng)用
?
  交通事故和交通阻塞是城市中和城市間交通存在的一個(gè)大問(wèn)題。國(guó)內(nèi)外都在加強(qiáng)高速公路行車支持道路系統(tǒng)(AHS)、智能運(yùn)輸系統(tǒng)(ITS)和道路交通信息系統(tǒng)(VICS)等的開發(fā)與建設(shè)。在這些新系統(tǒng)中,高靈敏度、高速響應(yīng)微型磁傳感器大有用武之地。例如,用分辨率可達(dá)1nT的GMI和SI傳感器,可構(gòu)成ITS傳感器(作高速路上的道路標(biāo)志,測(cè)車輪角度,貨車近接距離),汽車通過(guò)記錄儀(測(cè)通行方向、速度、車身長(zhǎng)度、車種識(shí)別),停車場(chǎng)成批車輛傳感器,加速度傳感器(測(cè)車輛通過(guò)時(shí)路橋的振動(dòng)等)。
?
  磁傳感器在電子羅盤中的應(yīng)用
?
  幾個(gè)世紀(jì)以來(lái),人們?cè)趯?dǎo)航中一直使用磁羅盤。有資料顯示早在二千多年前中國(guó)人就開始使用天然磁石-一種磁鐵礦來(lái)指示水平方向。電子羅盤(數(shù)字羅盤,電子指南針,數(shù)字指南針)是測(cè)量方位角(航向角)比較經(jīng)濟(jì)的一種電子儀器。如今電子指南針廣泛應(yīng)用于汽車和手持電子羅盤,手表,手機(jī),對(duì)講機(jī),雷達(dá)探測(cè)器,望遠(yuǎn)鏡,探星儀,穆斯林麥加探測(cè)器(穆斯林鐘),手持 GPS 系統(tǒng),尋路器,武器/導(dǎo)彈導(dǎo)航( 航位推測(cè) ),位置/方位系統(tǒng),安全/定位設(shè)備,汽車、航海和航空的高性能導(dǎo)航設(shè)備,電子游戲機(jī)設(shè)備等需要方向或姿態(tài)顯示的設(shè)備。
?
  地球本身是一個(gè)大磁鐵,地球表面的磁場(chǎng)大約為0.5Oe,地磁場(chǎng)平行地球表面并始終指向北方。利用GMR薄膜可做成用來(lái)探測(cè)地磁場(chǎng)的傳感器。圖5顯示這種傳感器的具體工作原理。我們可以制出能夠探測(cè)磁場(chǎng)X和Y方向分量的集成GMR傳感器。此傳感器可作為羅盤并應(yīng)用在各種交通工具上作為導(dǎo)航裝置。美國(guó)的NVE公司已經(jīng)把GMR傳感器用在車輛的交通控制系統(tǒng)上。例如,放置在高速公路邊的GMR傳感器可以計(jì)算和區(qū)別通過(guò)傳感器的車輛。如果同時(shí)分開放置兩個(gè)GMR傳感器,還可以探測(cè)出通過(guò)車輛的速度和車輛的長(zhǎng)度,當(dāng)然GMR也可用在公路的收費(fèi)亭,從而實(shí)現(xiàn)收費(fèi)的自動(dòng)控制。另外高靈敏度和低磁場(chǎng)的傳感器可以用在航空、航天及衛(wèi)星通信技術(shù)上。大家知道,在軍事工業(yè)中隨著吸波技術(shù)的發(fā)展,軍事物件可以通過(guò)覆蓋一層吸波材料而隱蔽,但是它們無(wú)論如何都會(huì)產(chǎn)生磁場(chǎng),因此通過(guò)GMR磁場(chǎng)傳感器可以把隱蔽的物體找出來(lái)。當(dāng)然,GMR磁場(chǎng)傳感器可以應(yīng)用在衛(wèi)星上,用來(lái)探測(cè)地球表面上的物體和底下的礦藏分布。
?
  門磁傳感器在智能家居中的應(yīng)用
?
  在智能家居門禁系統(tǒng)中門磁開關(guān)的作用是負(fù)責(zé)門磁通電否,通電帶磁(閉門),斷電消磁(開門),門磁安裝于門與門套上,開關(guān)安裝于屋內(nèi),配合自動(dòng)閉門器使用,一般可承受150公斤的拉力。
?
  有線門磁為嵌入式安裝更加隱蔽,感應(yīng)門窗的開合,適用于木質(zhì)或鋁合金門窗發(fā)出有線常閉/常開開關(guān)信號(hào)。門磁是用來(lái)探測(cè)門、窗、抽屜等是否被非法打開或移動(dòng)。它由無(wú)線發(fā)射器和磁塊兩部分組成。門磁系統(tǒng)其實(shí)和床磁等原理相同。

  今天我們開始進(jìn)入講解android中的一些高級(jí)主題的用法,比如傳感器、GPS、NFC、語(yǔ)音和人臉識(shí)別等。

  這次來(lái)對(duì)傳感器的一個(gè)簡(jiǎn)單介紹:

  Android平臺(tái)支持三大類的傳感器:

  位移傳感器

  這些傳感器測(cè)量沿三個(gè)軸線測(cè)量加速度和旋轉(zhuǎn)。這類包含加速度,重力傳感器,陀螺儀,和矢量傳感器。

  環(huán)境傳感器

  這些傳感器測(cè)量各種環(huán)境參數(shù),例如周圍的空氣溫度和壓力,光線,和濕度。這類包含氣壓,光線,和溫度傳感器。

  位置傳感器

  這些傳感器測(cè)量設(shè)備的物理位置。這類包含方向和磁力傳感器。

  這些傳感器的一些是基于硬件的,一些是基于軟件的。基于硬件的傳感器是內(nèi)嵌到手機(jī)或者平板中的物理元件,它們通過(guò)直接測(cè)量指定的環(huán)境屬性來(lái)得到它們的數(shù)據(jù),例如加速度,磁場(chǎng)強(qiáng)度,或者角度變化?;谲浖膫鞲衅鞑皇俏锢碓O(shè)備,盡管它們模仿基于硬件的傳感器?;谲浖?傳感器從一個(gè)或更多基于硬件的傳感器獲取它們的數(shù)據(jù),并且有時(shí)候被稱為虛擬傳感器或者合成傳感器。線性加速度傳感器和重力傳感器是基于軟件傳感器的例子。

  很少Android設(shè)備有所有類型的傳感器。例如,大部分手機(jī)和平板有一個(gè)加速計(jì)和磁場(chǎng)計(jì),但是很少的設(shè)備擁有氣壓或者溫度傳感器。并且,一個(gè)設(shè)備可以擁有一個(gè)類型不止一個(gè)的傳感器。例如,設(shè)備能有兩個(gè)重力傳感器,每個(gè)有不同的范圍。

  需要指出的是,傳感器的坐標(biāo)系統(tǒng)與屏幕坐標(biāo)系統(tǒng)不同,傳感器坐標(biāo)系統(tǒng)的X軸沿屏幕向右;Y軸則沿屏幕向上,Z軸在垂直屏幕向上。

  我們依次看看幾種傳感器:

  1 加速度傳感器

  加速度傳感器又叫G-sensor,返回x、y、z三軸的加速度數(shù)值。

  該數(shù)值包含地心引力的影響,單位是m/s^2。

  將手機(jī)平放在桌面上,x軸默認(rèn)為0,y軸默認(rèn)0,z軸默認(rèn)9.81。

  將手機(jī)朝下放在桌面上,z軸為-9.81。

  將手機(jī)向左傾斜,x軸為正值。

  將手機(jī)向右傾斜,x軸為負(fù)值。

  將手機(jī)向上傾斜,y軸為負(fù)值。

  將手機(jī)向下傾斜,y軸為正值。

  2 磁力傳感器

  磁力傳感器簡(jiǎn)稱為M-sensor,返回x、y、z三軸的環(huán)境磁場(chǎng)數(shù)據(jù)。

  該數(shù)值的單位是微特斯拉(micro-Tesla),用uT表示。

  單位也可以是高斯(Gauss),1Tesla=10000Gauss。

  硬件上一般沒(méi)有獨(dú)立的磁力傳感器,磁力數(shù)據(jù)由電子羅盤傳感器提供(E-compass)。

  電子羅盤傳感器同時(shí)提供下文的方向傳感器數(shù)據(jù)。

  3 方向傳感器

  方向傳感器簡(jiǎn)稱為O-sensor,返回三軸的角度數(shù)據(jù),方向數(shù)據(jù)的單位是角度。

  為了得到精確的角度數(shù)據(jù),E-compass需要獲取G-sensor的數(shù)據(jù),

  經(jīng)過(guò)計(jì)算生產(chǎn)O-sensor數(shù)據(jù),否則只能獲取水平方向的角度。

  方向傳感器提供三個(gè)數(shù)據(jù),分別為azimuth、pitch和roll。

  azimuth:方位,以z軸為軸,返回水平時(shí)磁北極和Y軸的夾角,范圍為0°至360°。

  0°=北,90°=東,180°=南,270°=西。

  pitch:x軸和水平面的夾角,范圍為-180°至180°。

  當(dāng)z軸向y軸轉(zhuǎn)動(dòng)時(shí),角度為正值。

  roll:y軸和水平面的夾角,由于歷史原因,范圍為-90°至90°。

  當(dāng)x軸向z軸移動(dòng)時(shí),角度為正值。

  4 陀螺儀傳感器

  陀螺儀傳感器叫做Gyro-sensor,返回x、y、z三軸的角加速度數(shù)據(jù)。

  角加速度的單位是radians/second。

  根據(jù)Nexus S手機(jī)實(shí)測(cè):

  水平逆時(shí)針旋轉(zhuǎn),Z軸為正。

  水平逆時(shí)針旋轉(zhuǎn),z軸為負(fù)。

  向左旋轉(zhuǎn),y軸為負(fù)。

  向右旋轉(zhuǎn),y軸為正。

  向上旋轉(zhuǎn),x軸為負(fù)。

  向下旋轉(zhuǎn),x軸為正。

  5 光線感應(yīng)傳感器

  光線感應(yīng)傳感器檢測(cè)實(shí)時(shí)的光線強(qiáng)度,光強(qiáng)單位是lux,其物理意義是照射到單位面積上的光通量。

  光線感應(yīng)傳感器主要用于Android系統(tǒng)的LCD自動(dòng)亮度功能。

  可以根據(jù)采樣到的光強(qiáng)數(shù)值實(shí)時(shí)調(diào)整LCD的亮度。

  6 壓力傳感器

  壓力傳感器返回當(dāng)前的壓強(qiáng),單位是百帕斯卡hectopascal(hPa)。

  7 溫度傳感器

  溫度傳感器返回當(dāng)前的溫度。

  8 距離傳感器

  距離傳感器檢測(cè)物體與手機(jī)的距離,單位是厘米。

  一些距離傳感器只能返回遠(yuǎn)和近兩個(gè)狀態(tài),

  因此,距離傳感器將最大距離返回遠(yuǎn)狀態(tài),小于最大距離返回近狀態(tài)。

  距離傳感器可用于接聽(tīng)電話時(shí)自動(dòng)關(guān)閉LCD屏幕以節(jié)省電量。

  一些芯片集成了距離傳感器和光線傳感器兩者功能。

  下面三個(gè)傳感器做個(gè)比較:

  重力傳感器

  重力傳感器簡(jiǎn)稱GV-sensor,輸出重力數(shù)據(jù)。

  在地球上,重力數(shù)值為9.8,單位是m/s^2。

  坐標(biāo)系統(tǒng)與加速度傳感器相同。

  當(dāng)設(shè)備復(fù)位時(shí),重力傳感器的輸出與加速度傳感器相同。

  線性加速度傳感器

  線性加速度傳感器簡(jiǎn)稱LA-sensor。

  線性加速度傳感器是加速度傳感器減去重力影響獲取的數(shù)據(jù)。

  單位是m/s^2,坐標(biāo)系統(tǒng)與加速度傳感器相同。

  加速度傳感器、重力傳感器和線性加速度傳感器的計(jì)算公式如下:

  加速度 = 重力 + 線性加速度

  旋轉(zhuǎn)矢量傳感器

  旋轉(zhuǎn)矢量傳感器簡(jiǎn)稱RV-sensor。

  旋轉(zhuǎn)矢量代表設(shè)備的方向,是一個(gè)將坐標(biāo)軸和角度混合計(jì)算得到的數(shù)據(jù)。

  RV-sensor輸出三個(gè)數(shù)據(jù):

  x*sin(theta/2)

  y*sin(theta/2)

  z*sin(theta/2)

  sin(theta/2)是RV的數(shù)量級(jí)。

  RV的方向與軸旋轉(zhuǎn)的方向相同。

  RV的三個(gè)數(shù)值,與cos(theta/2)組成一個(gè)四元組。

  RV的數(shù)據(jù)沒(méi)有單位,使用的坐標(biāo)系與加速度相同。

  傳感器框架:

  你能訪問(wèn)這些傳感器,是通過(guò)使用Android傳感器框架獲取原始數(shù)據(jù)。Android傳感器框架式android.hardware包的一部分,包含下面的類和接口

  SensorManager

  你能使用這個(gè)類來(lái)創(chuàng)建一個(gè)傳感器服務(wù)的實(shí)例。這個(gè)類提供了各種方法類訪問(wèn)和列舉傳感器,注冊(cè)和注銷傳感器事件監(jiān)聽(tīng),并獲取相應(yīng)的信息。這個(gè)類也提供了幾個(gè)傳感器的常量,用戶報(bào)告?zhèn)鞲衅鞯木_度,設(shè)置數(shù)據(jù)獲取速率,和校準(zhǔn)傳感器。

  Sensor

  你能使用這個(gè)類來(lái)創(chuàng)建一個(gè)指定傳感器的實(shí)例。這個(gè)類提供了各種方法讓你確定傳感器的功能。

  SensorEvent

  它提供了關(guān)于傳感器事件的信息。一個(gè)傳感器事件包含以下信息:原始傳感器數(shù)據(jù),這類傳感器產(chǎn)生的事件,數(shù)據(jù)的準(zhǔn)確性,和事件的時(shí)間戳。

  SensorEventListener

  你能使用這個(gè)接口來(lái)創(chuàng)建兩個(gè)回調(diào)方法,當(dāng)傳感器的值改變或者當(dāng)傳感器的精度改變的時(shí)候,它接受通知(傳感器事件)。

  傳感器的值改變

  在這種情況下系統(tǒng)調(diào)用onSensorChanged()方法,向你提供了一個(gè)SensorEvent對(duì)象,一個(gè)SensorEvent對(duì)象包含關(guān)于新的傳感器數(shù)據(jù)的信息,包括:數(shù)據(jù)的精度,傳感器產(chǎn)生的數(shù)據(jù),數(shù)據(jù)產(chǎn)生的時(shí)間戳,和傳感器記錄的新的數(shù)據(jù)。

  傳感器精度的變化

  在 這種情況下系統(tǒng)調(diào)用onAccuracyChanged()方法,向你提供改變了新的傳感器精度的Sensor對(duì)象引用。精度通過(guò)四個(gè)狀態(tài)常量代 表:SENSOR_STATUS_ACCURACY_LOW,SENSOR_STATUS_ACCURACY_MEDIUM,SENSOR_STATUS_ACCURACY_HIGH, 或者SENSOR_STATUS_UNRELIABLE。

  使用傳感器的步驟如下:

 ?、僬{(diào)用Context的getSystemService(Context.SENSOR_SERVICE)方法獲取SensorManager對(duì)象。

 ?、谡{(diào)用SensorManager的getDefaultSensor(int type)方法來(lái)獲取指定類型的傳感器。

  從傳感器管理器中獲取其中某個(gè)或者某些傳感器的方法有如下三種:

  第一種:獲取某種傳感器的默認(rèn)傳感器

  Sensor defaultGyroscope = sensorManager.getDefaultSensor(Sensor.TYPE_GYROSCOPE);

  第二種:獲取某種傳感器的列表

  List《Sensor》 pressureSensors = sensorManager.getSensorList(Sensor.TYPE_PRESSURE);

  第三種:獲取所有傳感器的列表,我們這個(gè)例子就用的第三種

  List《Sensor》 allSensors = sensorManager.getSensorList(Sensor.TYPE_ALL);

  ③一般在Activity的onResume()方法中調(diào)用SensorManager的registerListener()為指定傳感器注冊(cè)監(jiān)聽(tīng)器即可。程序可以通過(guò)實(shí)現(xiàn)監(jiān)聽(tīng)器即可獲取傳感器傳回來(lái)的數(shù)據(jù)。

  SersorManager提供的注冊(cè)傳感器的方法為registerListener(SensorListener listener, Sensor sensor, int rate)該方法中三個(gè)參數(shù)說(shuō)明如下:

  listener:監(jiān)聽(tīng)傳感器事件的監(jiān)聽(tīng)器

  sensor:傳感器對(duì)象

  rate:指定獲取傳感器數(shù)據(jù)的頻率

  rate可以獲取傳感器數(shù)據(jù)的頻率,支持如下幾個(gè)頻率值:

  SENSOR_DELAY_FASTEST:最快,延遲最小。

  SENSOR_DELAY_GAME:適合游戲的頻率。

  SENSOR_DELAY_NORMAL:正常頻率

  SENSOR_DELAY_UI:適合普通用戶界面的頻率。

  那就來(lái)舉個(gè)例子來(lái)測(cè)試下:

  這個(gè)例子就是顯示下手機(jī)上支持的傳感器及傳感器的一些信息并測(cè)試幾個(gè)常用傳感器

  效果:

  核心代碼:

  activity_main.xml

  《LinearLayout xmlns:android=“http://schemas.android.com/apk/res/android”

  xmlns:tools=“http://schemas.android.com/tools”

  android:layout_width=“match_parent”

  android:layout_height=“match_parent”

  android:orientation=“vertical”

  tools:context=“com.example.fenxichuanganqi.MainActivity” 》

  《TextView

  android:id=“@+id/tv”

  android:layout_width=“wrap_content”

  android:layout_height=“wrap_content” /》

  《TextView

  android:layout_width=“wrap_content”

  android:layout_height=“wrap_content”

  android:text=“方向傳感器:”

  android:textColor=“#ff0000” /》

  《TextView

  android:id=“@+id/tv_direction”

  android:layout_width=“wrap_content”

  android:layout_height=“wrap_content” /》

  《TextView

  android:layout_width=“wrap_content”

  android:layout_height=“wrap_content”

  android:text=“線性傳感器:”

  android:textColor=“#ff0000” /》

  《TextView

  android:id=“@+id/tv_xianxing”

  android:layout_width=“wrap_content”

  android:layout_height=“wrap_content” /》

  《TextView

  android:layout_width=“wrap_content”

  android:layout_height=“wrap_content”

  android:text=“加速度傳感器:”

  android:textColor=“#ff0000” /》

  《TextView

  android:id=“@+id/tv_jiasudu”

  android:layout_width=“wrap_content”

  android:layout_height=“wrap_content” /》

  《TextView

  android:layout_width=“wrap_content”

  android:layout_height=“wrap_content”

  android:text=“光強(qiáng)傳感器:”

  android:textColor=“#ff0000” /》

  《TextView

  android:id=“@+id/tv_guangqiang”

  android:layout_width=“wrap_content”

  android:layout_height=“wrap_content” /》

  《TextView

  android:layout_width=“wrap_content”

  android:layout_height=“wrap_content”

  android:text=“距離傳感器:”

  android:textColor=“#ff0000” /》

  《TextView

  android:id=“@+id/tv_juli”

  android:layout_width=“wrap_content”

  android:layout_height=“wrap_content” /》

  《/LinearLayout》

  MainActivity.java

  public class MainActivity extends Activity implements SensorEventListener{

  private TextView tv;

  private TextView tv_direction;

  private TextView tv_xianxing;

  private TextView tv_jiasudu;

  private TextView tv_guangqiang;

  private TextView tv_juli;

  private SensorManager sensorManager;

  @Override

  protected void onCreate(Bundle savedInstanceState) {

  super.onCreate(savedInstanceState);

  setContentView(R.layout.activity_main);

  //1.獲取SensorManager服務(wù)

  sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);

  tv = (TextView) findViewById(R.id.tv);

  tv_direction = (TextView) findViewById(R.id.tv_direction);

  tv_xianxing = (TextView) findViewById(R.id.tv_xianxing);

  tv_jiasudu = (TextView) findViewById(R.id.tv_jiasudu);

  tv_guangqiang = (TextView) findViewById(R.id.tv_guangqiang);

  tv_juli = (TextView) findViewById(R.id.tv_juli);

  //獲取手機(jī)上支持的傳感器

  List《Sensor》 list = sensorManager.getSensorList(Sensor.TYPE_ALL);

  tv.append(“手機(jī)上有” + list.size() + “個(gè)傳感器” + “\n”);

  for (Sensor sensor : list) {

  String msg = “名字:” + sensor.getName() + “,版本:” + sensor.getVersion()

  +“,供應(yīng)商:” + sensor.getVendor() + “,類型:” + sensor.getType();

  tv.append(msg + “\n”);

  }

  }

  @Override

  protected void onResume() {

  //23.獲得相應(yīng)傳感器并注冊(cè)監(jiān)聽(tīng)器

  //第三個(gè)參數(shù)表示精度

  sensorManager.registerListener(this,

  sensorManager.getDefaultSensor(Sensor.TYPE_ORIENTATION),

  sensorManager.SENSOR_DELAY_UI);

  sensorManager.registerListener(this,

  sensorManager.getDefaultSensor(Sensor.TYPE_LINEAR_ACCELERATION),

  sensorManager.SENSOR_DELAY_UI);

  sensorManager.registerListener(this,

  sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),

  sensorManager.SENSOR_DELAY_UI);

  sensorManager.registerListener(this,

  sensorManager.getDefaultSensor(Sensor.TYPE_LIGHT),

  sensorManager.SENSOR_DELAY_UI);

  sensorManager.registerListener(this,

  sensorManager.getDefaultSensor(Sensor.TYPE_PROXIMITY),

  sensorManager.SENSOR_DELAY_UI);

  super.onResume();

  }

  @Override

  protected void onStop() {

  //4.解除綁定

  sensorManager.unregisterListener(this);

  super.onStop();

  }

  @Override

  public void onSensorChanged(SensorEvent event) {

  //傳感器數(shù)據(jù)變化,在該方法中我們可以獲取傳感器變化的值

  switch (event.sensor.getType()) {

  case Sensor.TYPE_ORIENTATION:

  float z = event.values[0];

  float x = event.values[1];

  float y = event.values[2];

  tv_direction.setText(“z軸的方向:” + z + “\n”

  + “x軸的方向:” + x + “\n”

  + “y軸的方向:” + y + “\n”);

  break;

  case Sensor.TYPE_LINEAR_ACCELERATION:

  float x1 = event.values[0];

  float y1 = event.values[1];

  float z1 = event.values[2];

  tv_xianxing.setText(“x軸的加速度:” + x1 + “\n”

  + “y軸的加速度:” + y1 + “\n”

  + “z軸的加速度:” + z1 + “\n”);

  break;

  case Sensor.TYPE_ACCELEROMETER:

  float x2 = event.values[0];

  float y2 = event.values[1];

  float z2 = event.values[2];

  tv_jiasudu.setText(“x軸的加速度:” + x2 + “\n”

  + “y軸的加速度:” + y2 + “\n”

  + “z軸的加速度:” + z2 + “\n”);

  break;

  case Sensor.TYPE_LIGHT:

  float light = event.values[0];

  tv_guangqiang.setText(“光強(qiáng):” + light);

  break;

  case Sensor.TYPE_PROXIMITY:

  float distanse = event.values[0];

  tv_juli.setText(“距離傳感器:” + distanse);

  break;

  default:

  break;

  }

  }

  @Override

  public void onAccuracyChanged(Sensor sensor, int accuracy) {

  //傳感器精度的變化

  }

  }

  這個(gè)傳感器的介紹就這些,大家應(yīng)該都看得懂。趕緊拿出自己的手機(jī)來(lái)試試吧。


非常好我支持^.^

(0) 0%

不好我反對(duì)

(0) 0%

( 發(fā)表人:金巧 )

      發(fā)表評(píng)論

      用戶評(píng)論
      評(píng)價(jià):好評(píng)中評(píng)差評(píng)

      發(fā)表評(píng)論,獲取積分! 請(qǐng)遵守相關(guān)規(guī)定!

      ?