產(chǎn)品分類

      當(dāng)前位置: 首頁(yè) > 傳感測(cè)量產(chǎn)品 > 工業(yè)傳感器 > 力傳感器

      類型分類:
      科普知識(shí)
      數(shù)據(jù)分類:
      力傳感器

      android 傳感器 開(kāi)發(fā):Android開(kāi)發(fā)之重力傳感器

      發(fā)布日期:2022-10-09 點(diǎn)擊率:156


      android 傳感器 開(kāi)發(fā):Android開(kāi)發(fā)之重力傳感器

      重力傳感器與方向傳感器的開(kāi)發(fā)步驟類似,只要理清了期中的x,y,z的值之后就可以根據(jù)他們的變化來(lái)進(jìn)行編程了,首先來(lái)看一副圖

      假設(shè)當(dāng)?shù)氐闹亓铀俣戎禐間
      當(dāng)手機(jī)正面朝上的時(shí)候,z的值為q,反面朝上的時(shí)候,z的值為-g
      當(dāng)手機(jī)右側(cè)面朝上的時(shí)候,x的值為g,右側(cè)面朝上的時(shí)候,x的值為-g
      當(dāng)手機(jī)上側(cè)面朝上的時(shí)候,y的值為g,右側(cè)面朝上的時(shí)候,y的值為-g
      了解了重力傳感器中X,Y,Z的含義之后下面我們就開(kāi)始學(xué)習(xí)如何使用
      首先我們創(chuàng)建一個(gè)傳感器管理器和一個(gè)傳感器監(jiān)聽(tīng)器,管理器用來(lái)管理傳感器以及創(chuàng)建各種各樣的傳感器,監(jiān)聽(tīng)器用來(lái)監(jiān)視傳感器的變化并且進(jìn)行相應(yīng)的操作
      private SensorManager sensorManager;
      private MySensorEventListener mySensorEventListener;
      mySensorEventListener=new MySensorEventListener();//這個(gè)監(jiān)聽(tīng)器當(dāng)然是我們自己定義的,在重力感     應(yīng)器感應(yīng)到手機(jī)位置有變化的時(shí)候,我們可以采取相應(yīng)的操作,這里緊緊是將x,y,z的值打印出來(lái)
      private final class MySensorEventListener implements  SensorEventListener{

      @Override
      //可以得到傳感器實(shí)時(shí)測(cè)量出來(lái)的變化值
      public void onSensorChanged(SensorEvent event) {
      //重力傳感器
      if(event.sensor.getType()==Sensor.TYPE_ACCELEROMETER){
      float x=event.values[SensorManager.DATA_X];
      float y=event.values[SensorManager.DATA_Y];
      float z=event.values[SensorManager.DATA_Z];
      //tv_accelerometer是界面上的一個(gè)TextView標(biāo)簽,不再贅述
      tv_orientation.setText("Orientation:"+x+","+y+","+z);
      }
      }

      我們?cè)趏nResume方法中創(chuàng)建重力傳感器,并向系統(tǒng)注冊(cè)監(jiān)聽(tīng)器
      protected void onResume() {
      Sensor sensor_accelerometer=sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
      sensorManager.registerListener(mySensorEventListener,sensor_accelerometer,   SensorManager.SENSOR_DELAY_UI);

      super.onResume();
      }
      最后我們?cè)趏nPause()中注銷所有傳感器的監(jiān)聽(tīng),釋放重力感應(yīng)器資源!
      protected void onPause() {
      /注銷所有傳感器的監(jiān)聽(tīng)
      sensorManager.unregisterListener(mySensorEventListener);
      super.onPause();
      }
      到此,有關(guān)重力傳感器的介紹完畢!
      android 傳感器 開(kāi)發(fā):Android開(kāi)發(fā)之重力傳感器  第1張

      android 傳感器 開(kāi)發(fā):Android開(kāi)發(fā)網(wǎng)

      本節(jié)教程主要講解Android傳感器編程的基礎(chǔ)知識(shí),包括加速度傳感器(accelerometer)、陀螺儀(gyroscope)、環(huán)境光照傳感器(light)、磁力傳感器(magnetic field)、方向傳感器(orientation)、壓力傳感器(pressure)、距離傳感器(proximity)和溫度傳感器(temperature)。
        一、前言
        我很喜歡電腦,可是筆記本還是太大,筆記本電腦再小還是要弄個(gè)小包背起來(lái)的,智能手機(jī)則不同,它完全就是一個(gè)手機(jī),可以隨意裝在一個(gè)口袋里隨身攜帶。因此我在2002年左右時(shí)最喜歡玩裝備是Dell的PDA,2007年的時(shí)候最喜歡玩的是N73,而在2010年最喜歡玩的則是Milestone。眼見(jiàn)著手機(jī)的功能越來(lái)越強(qiáng),時(shí)至今日智能手機(jī)甚至在某些方面已經(jīng)強(qiáng)過(guò)了臺(tái)式機(jī)和筆記本。本節(jié)課講的就是智能手機(jī)強(qiáng)過(guò)臺(tái)式機(jī)和筆記本的地方:傳感器。
        2008年的時(shí)候我很喜歡我的小白筆記本Macbook,喜歡玩它的一個(gè)小軟件,一拍桌子,筆記本感受到了震動(dòng),它就轉(zhuǎn)換了一個(gè)桌面出來(lái),這讓我像個(gè)小孩子一樣沒(méi)事就拍拍桌子。這一功能這得益于蘋果筆記本內(nèi)置有傳感器。
        我不知道iPhone手機(jī)是不是第一個(gè)把各種各樣的傳感器運(yùn)用在手機(jī)上的,不過(guò)我知道iPhone是把傳感器運(yùn)用在手機(jī)上最成功的第一個(gè)。隨后的Android系統(tǒng)也內(nèi)置了大量的傳感器,這讓Android系統(tǒng)手機(jī)和普通的諾基亞智能機(jī)和Windows CE智能機(jī)相比牛氣了許多,在擁有了Milestone之后,我的N73就被仍在抽屜的角落里了。
        從Android1.5開(kāi)始,系統(tǒng)內(nèi)置了對(duì)多達(dá)八種傳感器的支持,他們分別是:加速度傳感器(accelerometer)、陀螺儀(gyroscope)、環(huán)境光照傳感器(light)、磁力傳感器(magnetic field)、方向傳感器(orientation)、壓力傳感器(pressure)、距離傳感器(proximity)和溫度傳感器(temperature)。
        利用這些傳感器我們可以制作出各種有趣的應(yīng)用程序和游戲。譬如在口袋里晃一晃手機(jī),手機(jī)就開(kāi)始神不知鬼不覺(jué)的錄音,不要著急這個(gè)很容易做,我們?cè)诒疚牡慕Y(jié)尾就一起制作這個(gè)小應(yīng)用。
        本講的學(xué)習(xí)方式還是在實(shí)戰(zhàn)中學(xué)習(xí),需要提醒的是模擬器中無(wú)法模擬傳感器,因此你需要準(zhǔn)備一款A(yù)ndroid真機(jī)才能運(yùn)行本講的例子。
        二、實(shí)例:手機(jī)傳感器清單
        我們還是先看程序后解釋。
        1、創(chuàng)建一個(gè)項(xiàng)目 Lesson37_HelloSensor ,主Activity名字叫 mainActivity.java。
        2、UI布局文件main.xml的內(nèi)容如下:
      XML/HTML代碼    3、mainActivity.java的內(nèi)容如下:
      Java代碼    package basic.android.lesson37;             import java.util.List;             import android.app.Activity;       import android.content.Context;       import android.hardware.Sensor;       import android.hardware.SensorManager;       import android.os.Bundle;       import android.widget.TextView;             public class MainActivity extends Activity {                                   @Override              public void onCreate(Bundle savedInstanceState) {                       super.onCreate(savedInstanceState);                       setContentView(R.layout.main);                             //準(zhǔn)備顯示信息的UI組建                       final TextView tx1 = (TextView) findViewById(R.id.TextView01);                             //從系統(tǒng)服務(wù)中獲得傳感器管理器                       SensorManager sm = (SensorManager) getSystemService(Context.SENSOR_SERVICE);                             //從傳感器管理器中獲得全部的傳感器列表                       List
        4、連接真機(jī)Milestone,編譯并運(yùn)行程序,顯示結(jié)果如下:
        5、結(jié)合上面的程序我們做一些解釋。
        1)Android所有的傳感器都?xì)w傳感器管理器 SensorManager 管理,獲取傳感器管理器的方法很簡(jiǎn)單:
        String service_name=Context.SENSOR_SERVICE;
        SensorManager sensorManager=(SensorManager)getSystemService(service_name);
        2)現(xiàn)階段Android支持的傳感器有8種,它們分別是:
      傳感器類型常量                                    內(nèi)部整數(shù)值                                    中文名稱                                                    Sensor.TYPE_ACCELEROMETER                        1                        加速度傳感器                                                    Sensor.TYPE_MAGNETIC_FIELD                        2                        磁力傳感器                                                    Sensor.TYPE_ORIENTATION                        3                        方向傳感器                                                    Sensor.TYPE_GYROSCOPE                        4                        陀螺儀傳感器                                                    Sensor.TYPE_LIGHT                        5                        環(huán)境光照傳感器                                                    Sensor.TYPE_PRESSURE                        6                        壓力傳感器                                                    Sensor.TYPE_TEMPERATURE                        7                        溫度傳感器                                                    Sensor.TYPE_PROXIMITY                        8            距離傳感器
        3)從傳感器管理器中獲取其中某個(gè)或者某些傳感器的方法有如下三種:
        第一種:獲取某種傳感器的默認(rèn)傳感器
        Sensor defaultGyroscope=sensorManager.getDefaultSensor(Sensor.TYPE_GYROSCOPE);
        第二種:獲取某種傳感器的列表
        List

      本文發(fā)布:Android開(kāi)發(fā)網(wǎng)
      本文地址:

      2012年11月1日

      發(fā)布:雞啄米
      分類:Android開(kāi)發(fā)教程
      瀏覽:
      評(píng)論:1

      android 傳感器 開(kāi)發(fā):Android開(kāi)發(fā)之重力傳感器  第2張

      android 傳感器 開(kāi)發(fā):Android開(kāi)發(fā):Android設(shè)備傳感器開(kāi)發(fā)總結(jié)

      加速度傳感器
      加速度傳感器又叫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軸為正值。
       磁力傳感器
      磁力傳感器簡(jiǎn)稱為M-sensor,返回x、y、z三軸的環(huán)境磁場(chǎng)數(shù)據(jù)。 該數(shù)值的單位是微特斯拉(micro-Tesla),用uT表示。 單位也可以是高斯(Gauss),1Tesla=Gauss。 硬件上一般沒(méi)有獨(dú)立的磁力傳感器,磁力數(shù)據(jù)由電子羅盤傳感器提供(E-compass)。 電子羅盤傳感器同時(shí)提供下文的方向傳感器數(shù)據(jù)。
       方向傳感器
      方向傳感器簡(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:方位,返回水平時(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í),角度為正值。   電子羅盤在獲取正確的數(shù)據(jù)前需要進(jìn)行校準(zhǔn),通常可用8字校準(zhǔn)法。 8字校準(zhǔn)法要求用戶使用需要校準(zhǔn)的設(shè)備在空中做8字晃動(dòng), 原則上盡量多的讓設(shè)備法線方向指向空間的所有8個(gè)象限。
       陀螺儀傳感器
      陀螺儀傳感器叫做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軸為正。
       光線感應(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的亮度。
       壓力傳感器
      壓力傳感器返回當(dāng)前的壓強(qiáng),單位是百帕斯卡hectopascal(hPa)。
       溫度傳感器
      溫度傳感器返回當(dāng)前的溫度。
       距離傳感器
      又稱接近傳感器,檢測(cè)物體與手機(jī)的距離,單位是厘米。 一些接近傳感器只能返回遠(yuǎn)和近兩個(gè)狀態(tài), 因此,接近傳感器將最大距離返回遠(yuǎn)狀態(tài),小于最大距離返回近狀態(tài)。 接近傳感器可用于接聽(tīng)電話時(shí)自動(dòng)關(guān)閉LCD屏幕以節(jié)省電量。 一些芯片集成了接近傳感器和光線傳感器兩者功能。
       重力傳感器
      重力傳感器簡(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)系與加速度相同。 舉例: sensors_event_t.data[0]=x*sin(theta/2) sensors_event_t.data[1]=y*sin(theta/2) sensors_event_t.data[2]=z*sin(theta/2) sensors_event_t.data[3]=  cos(theta/2)

      android 傳感器 開(kāi)發(fā):詳解Android 傳感器開(kāi)發(fā) 完全解析

      大家好,由于最近會(huì)有對(duì)智能硬件相關(guān)的開(kāi)發(fā)需求,所以最近這些天分享的博文也就大致掛鉤智能硬件了,像上一篇的藍(lán)牙分享,相信很多讀者已經(jīng)看過(guò)了,那么今天我為大家?guī)?lái)Android傳感器方面知識(shí)的介紹與使用方法,對(duì)于傳感器的使用,不同版本的Android手機(jī)也許存在較大的硬件差異,但是萬(wàn)變不離其宗,本篇將通過(guò)幾個(gè)最常見(jiàn)的傳感器,滲透式的教會(huì)大家如何使用這些傳感器,帶領(lǐng)大家完成這部分的進(jìn)階提高。讓每一位Android開(kāi)發(fā)者都對(duì)傳感器的使用變得游刃有余。
      1.Android的三大類傳感器
      Android傳感器按大方向劃分大致有這么三類傳感器:動(dòng)作(Motion)傳感器、環(huán)境(Environmental)傳感器、位置(Position)傳感器。
      (1)動(dòng)作傳感器
      這類傳感器在三個(gè)軸(x、y、z)上測(cè)量加速度和旋轉(zhuǎn)角度。包括如下幾個(gè)傳感器:
      加速(accelerometer)傳感器、重力(gravity)傳感器、陀螺儀(gyroscope)傳感器、旋轉(zhuǎn)向量(rotational vector )傳感器
      下面來(lái)看一下傳感器世界的坐標(biāo)系:
      傳感器世界的坐標(biāo)系
      是不是已經(jīng)有點(diǎn)感覺(jué)了。
      (2)環(huán)境傳感器
      這類傳感器可以測(cè)量不同環(huán)境的參數(shù),例如,周圍環(huán)境的空氣溫度和壓強(qiáng)、光照強(qiáng)度和濕度。包括如下幾個(gè)傳感器:
      濕度(barometer)傳感器、光線(photometer)傳感器、溫度(thermometer)傳感器
      (3)位置傳感器
      這類傳感器可以測(cè)量設(shè)備的物理位置。包括如下幾個(gè)傳感器:
      方向(orientation)傳感器、磁力(magnetometer)傳感器
      了解后我們就開(kāi)始進(jìn)入傳感器的編程工作了,接下來(lái)我們看一下Android為我們提供的傳感器框架(Android sensor framework,簡(jiǎn)稱ASF)。
      2.Android傳感器框架
      Android SDK為我們提供了ASF,可以用來(lái)訪問(wèn)當(dāng)前Android設(shè)備內(nèi)置的傳感器。ASF提供了很多類和接口,幫助我們完成各種與傳感器有關(guān)的任務(wù)。例如:
      1)確定當(dāng)前Android設(shè)備內(nèi)置了哪些傳感器。
      2)確定某一個(gè)傳感器的技術(shù)指標(biāo)。
      3)獲取傳感器傳回來(lái)的數(shù)據(jù),以及定義傳感器回傳數(shù)據(jù)的精度。
      4)注冊(cè)和注銷傳感器事件監(jiān)聽(tīng)器,這些監(jiān)聽(tīng)器用于監(jiān)聽(tīng)傳感器的變化,通常從傳感器回傳的數(shù)據(jù)需要利用這些監(jiān)聽(tīng)器完成。
      ASF允許我們?cè)L問(wèn)很多傳感器類型,這些傳感器有一些是基于硬件的傳感器,還有一些是基于軟件的傳感器。基于硬件的傳感器就是直接以芯片形式嵌入到Android設(shè)備中,這些傳感器直接從外部環(huán)境獲取數(shù)據(jù)。基于軟件的傳感器并不是實(shí)際的硬件芯片,基于軟件的傳感器傳回的數(shù)據(jù)本質(zhì)上也來(lái)自于基于硬件的傳感器,只是這些數(shù)據(jù)通常會(huì)經(jīng)過(guò)二次加工。所以基于軟件的傳感器也可以稱為虛擬(virtual)傳感器或合成(synthetic)傳感器。
      Android對(duì)每個(gè)設(shè)備的傳感器都進(jìn)行了抽象,其中SensorManger類用來(lái)控制傳感器,Sensor用來(lái)描述具體的傳感器,SensorEventListener用來(lái)監(jiān)聽(tīng)傳感器值的改變。
      (1)SensorManager類
      用于創(chuàng)建sensor service的實(shí)例。該類提供了很多用于訪問(wèn)和枚舉傳感器,注冊(cè)和注銷傳感器監(jiān)聽(tīng)器的方法。而且還提供了與傳感器精度、掃描頻率、校正有關(guān)的常量。
      (2)Sensor類
      Sensor類為我們提供了一些用于獲取傳感器技術(shù)參數(shù)的方法。如版本、類型、生產(chǎn)商等。例如所有傳感器的TYPE類型如下:
      注意:1-8是硬件傳感器,9是軟件傳感器,其中方向傳感器的數(shù)據(jù)來(lái)自重力和磁場(chǎng)傳感器,10-12是硬件或軟件傳感器。

      序號(hào)
       傳感器
       Sensor類中定義的TYPE常量

      1
       加速度傳感器
       TYPE_ACCELEROMETER

      2
       溫度傳感器
       TYPE_AMBIENT_TEMPERATURE

      3
       陀螺儀傳感器
       TYPE_GYROSCOPE

      4
       光線傳感器
       TYPE_LIGHT

      5
       磁場(chǎng)傳感器
       TYPE_MAGNETIC_FIELD

      6
       壓力傳感器
       TYPE_PRESSURE

      7
       臨近傳感器
       TYPE_PROXIMITY

      8
       濕度傳感器
       TYPE_RELATIVE_HUMIDITY

      9
       方向傳感器
       TYPE_ORIENTATION

      10
       重力傳感器
       TYPE_GRAVITY

      11
       線性加速傳感器
       TYPE_LINEAR_ACCELERATION

      12
       旋轉(zhuǎn)向量傳感器
       TYPE_ROTATION_VECTOR

      (3)SensorEvent類
      系統(tǒng)使用該類創(chuàng)建傳感器事件對(duì)象。該對(duì)象可以提供與傳感器事件有關(guān)的信息。傳感器事件對(duì)象包括的信息有原始的傳感器回傳數(shù)據(jù)、傳感器類型、數(shù)據(jù)的精度以及觸發(fā)事件的時(shí)間。
      (4)SensorEventListener接口
      該接口包含兩個(gè)回調(diào)方法,當(dāng)傳感器的回傳值或精度發(fā)生變化時(shí),系統(tǒng)會(huì)調(diào)用這兩個(gè)回調(diào)方法。
      @Override
      public void onAccuracyChanged(Sensor sensor, int accuracy) {
      }
      @Override
      public void onSensorChanged(SensorEvent event) {
      }
      到了這里,我們就可以進(jìn)行傳感器開(kāi)發(fā)工作了。
      3.獲取傳感器技術(shù)參數(shù)
      下來(lái)我們編寫(xiě)代碼來(lái)獲取一下自己手機(jī)的傳感器技術(shù)參數(shù)。
      TextView tvSensors=(TextView) findViewById(R.id.tv_sensors);
      //獲取傳感器SensorManager對(duì)象
      SensorManager sensorManager=(SensorManager) getSystemService(SENSOR_SERVICE);
      List

      @Override
       public void onAccuracyChanged(Sensor sensor, int accuracy) {
       }

      @Override
       public void onSensorChanged(SensorEvent event) {
      //判斷傳感器類別
      switch (event.sensor.getType()) {
       case Sensor.TYPE_ACCELEROMETER: //加速度傳感器
      final float alpha=(float) 0.8;
      gravity[0]=alpha * gravity[0] + (1 - alpha) * event.values[0];
      gravity[1]=alpha * gravity[1] + (1 - alpha) * event.values[1];
      gravity[2]=alpha * gravity[2] + (1 - alpha) * event.values[2];
      String accelerometer="加速度傳感器
      " + "x:"
      + (event.values[0] - gravity[0]) + "
      " + "y:"
      + (event.values[1] - gravity[1]) + "
      " + "z:"
      + (event.values[2] - gravity[2]);
      tvAccelerometer.setText(accelerometer);
      //重力加速度9.81m/s^2,只受到重力作用的情況下,自由下落的加速度
      break;
       case Sensor.TYPE_GRAVITY://重力傳感器
      gravity[0]=event.values[0];//單位m/s^2
      gravity[1]=event.values[1];
      gravity[2]=event.values[2];
      break;
       default:
      break;
      }
       }

      protected void onResume() {
      super.onResume();
      //注冊(cè)加速度傳感器
      mSensorManager.registerListener(this,
      mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),//傳感器TYPE類型
      SensorManager.SENSOR_DELAY_UI);//采集頻率
      //注冊(cè)重力傳感器
      mSensorManager.registerListener(this,
      mSensorManager.getDefaultSensor(Sensor.TYPE_GRAVITY),
      SensorManager.SENSOR_DELAY_FASTEST);
       }

      @Override
       protected void onPause() {
      super.onPause();
      mSensorManager.unregisterListener(this);
       }
      }
      我們將手機(jī)水平正面朝上放置于桌子上,看一下效果圖:
      我們可以看到正值和負(fù)值,那什么情況是正值?什么情況是負(fù)值呢?
      設(shè)備沿x軸正方向推動(dòng),x軸加速度為正值。
      設(shè)備沿y軸正方向推動(dòng),y軸加速度為正值。
      如果沿z軸正方向推動(dòng),此時(shí)手機(jī)相對(duì)于桌子水平正面朝上放置,z軸加速度為正值。由底部朝著頂部以a m/s^2的加速度推動(dòng),那么z軸的加速度為a + 9.81,所以如果計(jì)算實(shí)際的加速度(抵消重力加速度),需要減9.81。
      5.位置傳感器的組成及使用方法
      Android提供了磁場(chǎng)傳感器和方向傳感器用于確定設(shè)備的位置,還提供了測(cè)量設(shè)備正面到某一個(gè)鄰近物體距離的傳感器(鄰近傳感器)。
      鄰近傳感器在手機(jī)中很常見(jiàn)。像接聽(tīng)電話時(shí)手機(jī)屏幕滅屏就是使用的鄰近傳感器。方向傳感器是基于軟件的,該傳感器的回傳數(shù)據(jù)來(lái)自加速度傳感器和磁場(chǎng)傳感器。
      位置傳感器對(duì)于確定設(shè)備在真實(shí)世界中的物理位置非常有用。例如,可以組合磁場(chǎng)傳感器和加速度傳感器測(cè)量設(shè)備相對(duì)于地磁北極的位置,還可以利用方向傳感器確定當(dāng)前設(shè)備相對(duì)于自身參照系的位置。
      磁場(chǎng)傳感器和方向傳感器都返回值3個(gè)值(SensorEvent.values),而鄰近傳感器只返回1個(gè)值。
      下面我們具體看一下他們的返回值:
      方向傳感器:
       SensorEvent.values[0]:繞著Z軸旋轉(zhuǎn)的角度。如果Y軸(正常拿手機(jī)的方向)正對(duì)著北方,該值是0,如果Y軸指向南方,改值是180,Y軸指向東方,該值是90,如果Y軸指向西方,該值是270。

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

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

      磁場(chǎng)傳感器:
       SensorEvent.values[0]:沿著X軸的磁力(μT,millitesla)
       SensorEvent.values[1]:沿著Y軸的磁力(μT,millitesla)
       SensorEvent.values[2]:沿著Y軸的磁力(μT,millitesla)

      鄰近傳感器:
      SensorEvent.values[0]:手機(jī)正面距離鄰近物理的距離(CM)
      (1)臨近傳感器
      這里以臨近傳感器作為示例工程實(shí)現(xiàn)一下,其他傳感器實(shí)現(xiàn)大同小異。
      public class SensorActivity extends AppCompatActivity implements SensorEventListener {
       private TextView tvProximity;
       private SensorManager mSensorManager;
       @Override
       protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_motion_sensor);
      tvProximity=(TextView) findViewById(R.id.tv_proximity);
      //獲取傳感器SensorManager對(duì)象
      mSensorManager=(SensorManager) getSystemService(SENSOR_SERVICE);
       }

      @Override
       public void onAccuracyChanged(Sensor sensor, int accuracy) {
       }

      @Override
       public void onSensorChanged(SensorEvent event) {
      //判斷傳感器類別
      switch (event.sensor.getType()) {
       case Sensor.TYPE_PROXIMITY://臨近傳感器
      tvProximity.setText(String.valueOf(event.values[0]));
      break;
       default:
      break;
      }
       }

      protected void onResume() {
      super.onResume();
      //注冊(cè)臨近傳感器
      mSensorManager.registerListener(this,
      mSensorManager.getDefaultSensor(Sensor.TYPE_PROXIMITY),
      SensorManager.SENSOR_DELAY_UI);
       }

      @Override
       protected void onPause() {
      super.onPause();
      mSensorManager.unregisterListener(this);
       }
      }
      運(yùn)行程序,我間斷的擋住臨近傳感器,看一下效果圖:
      0.0是我擋住臨近傳感器時(shí)候的值,8.0是我將手移開(kāi)時(shí)的值。
      下面我們?cè)賮?lái)看一個(gè)比較叼的傳感器,與自然息息相關(guān)。
      6.環(huán)境傳感器的組成及使用方法
      Android提供了用于檢測(cè)不同的外部環(huán)境的傳感器。例如,可以檢測(cè)周圍空氣的濕度、光線、空氣的壓強(qiáng)和溫度,這些傳感器都是基于硬件的傳感器。除了光線傳感器外,其他傳感器在普通的Android設(shè)備中很少見(jiàn)。所以如果使用環(huán)境傳感器,最好運(yùn)行時(shí)對(duì)當(dāng)前Android設(shè)備所支持的傳感器進(jìn)行檢測(cè)。
      (1)環(huán)境傳感器的返回值
      大多數(shù)動(dòng)作傳感器和位置傳感器都返回多個(gè)值,而所有的環(huán)境傳感器都只返回一個(gè)值:

      傳感器
       TYPE值
       返回值
       單位

      溫度傳感器
       TYPE_AMBIENT_TEMPERATURE
       event.values[0]
       °C

      壓力傳感器
       TYPE_PRESSURE
       event.values[0]
       hPa

      光線傳感器
       TYPE_LIGHT
       event.values[0]
       lx

      濕度傳感器
       TYPE_RELATIVE_HUMIDITY
       event.values[0]
       RH(%)

      注意:環(huán)境傳感器返回的值很少受到雜音的干擾,而動(dòng)作和位置傳感器經(jīng)常需要消除雜音的影響。例如,加速度傳感器要消除重力對(duì)其回傳值的影響。
      (2)光線傳感器回傳數(shù)據(jù)
      //最強(qiáng)的光線強(qiáng)度(估計(jì)只有沙漠地帶才能達(dá)到這個(gè)值)
      public static final float LIGHT_SUNLIGHT_MAX=.0f;
      //萬(wàn)里無(wú)云時(shí)陽(yáng)光直射的強(qiáng)度
      public static final float LIGHT_SUNLIGHT=.0f;
      //有陽(yáng)光,但被云彩抵消了部分光線時(shí)的強(qiáng)度
      public static final float LIGHT_SHADE=.0f;
      //多云時(shí)的光線強(qiáng)度
      public static final float LIGHT_OVERCAST=.0f;
      //太陽(yáng)剛剛升起時(shí)(日出)的光線強(qiáng)度
      public static final float LIGHT_SUNRISE=400.0f;
      //在陰雨天,沒(méi)有太陽(yáng)時(shí)的光線強(qiáng)度
      public static final float LIGHT_CLOUDY=100.0f;
      //夜晚有月亮?xí)r的光線強(qiáng)度
      public static final float LIGHT_FULLMOON=0.25f;
      //夜晚沒(méi)有月亮?xí)r的光線強(qiáng)度(當(dāng)然,也不能有路燈,就是漆黑一片)
      public static final float LIGHT_NO_MOON=0.001f;
      環(huán)境傳感器的使用方法與動(dòng)作、位置傳感器大同小異,在次不再贅述。
      相信通過(guò)本篇的學(xué)習(xí),大家的開(kāi)發(fā)水準(zhǔn)都會(huì)有一定的提高,而大家的提高是我最欣慰的事情了。也希望大家多多支持腳本之家。


      下一篇: PLC、DCS、FCS三大控

      上一篇: 電氣控制線路圖控制原

      主站蜘蛛池模板: 中文字幕一区二区三区永久| 无码人妻视频一区二区三区| aⅴ一区二区三区无卡无码| 精品国产一区二区三区久久蜜臀| 无码乱人伦一区二区亚洲一| 亚洲国产成人久久一区WWW | 国产精品资源一区二区| 一区二区三区视频在线观看| 精品视频一区二区三区| 无码日韩AV一区二区三区| 一区二区高清在线| 免费人妻精品一区二区三区| 伊人精品视频一区二区三区| 亚洲香蕉久久一区二区三区四区 | 日本高清无卡码一区二区久久| 国产乱码精品一区二区三区中| 久久一本一区二区三区| 久久se精品一区精品二区| 国产一区二区三区不卡AV| 久久亚洲中文字幕精品一区| 中文字幕一区二区三区在线播放| 男人免费视频一区二区在线观看| 精品视频在线观看一区二区三区| 日韩免费视频一区| 日本夜爽爽一区二区三区| 一区在线观看视频| 综合久久一区二区三区| 久久国产精品视频一区| 色偷偷一区二区无码视频| 麻豆一区二区99久久久久| 亚洲乱码一区二区三区国产精品 | 伊人激情AV一区二区三区| 真实国产乱子伦精品一区二区三区 | 国产一区二区三区亚洲综合| 精品一区二区三区无码免费直播| 亚洲日本一区二区三区在线不卡 | 国产精品免费视频一区| 一区二区三区高清视频在线观看 | 丝袜美腿高跟呻吟高潮一区| 国产午夜毛片一区二区三区| 亚洲综合一区二区精品导航|