首頁技術(shù)文章正文

Android+物聯(lián)網(wǎng)培訓(xùn)之傳感器

更新時(shí)間:2017-08-01 來源:黑馬程序員Android+物聯(lián)網(wǎng)培訓(xùn)學(xué)院 瀏覽量:

我們已經(jīng)了解了傳感器的工作原理和常見的傳感器,下面我們要學(xué)習(xí)的是:了解Android中傳感器相關(guān)的API以及如何使用這些
傳感器。
新建工程
【File】——>【new】——>【Android Application Project】命名為:12_傳感器入門
讀設(shè)備傳感器
在程序中通過代碼遍歷當(dāng)前設(shè)備存在的傳感器種類,每一個(gè)設(shè)備上傳感器的有無以及傳感器的種類都不一樣。下例1-1是具體的
代碼實(shí)現(xiàn):
例1-1
protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        list = new ArrayList<Sensor>();
        //獲取系統(tǒng)傳感服務(wù)
        manager =(SensorManager) getSystemService(SENSOR_SERVICE);
        //得到設(shè)備上的傳感器集合
        list  = manager.getSensorList(manager.SENSOR_ALL);
        for(Sensor sensor :list){
                System.out.println("設(shè)備上的傳感器:=="+sensor.getName());
        }
}
復(fù)制代碼
運(yùn)行程序,在真機(jī)上測(cè)試(本例中小米3),此時(shí)logcat打印如圖1-1所示:
讀指定傳感器
如何在程序中讀取某一指定的傳感器對(duì)象,下面我們將通過代碼讀取設(shè)備上的光感傳感器并實(shí)現(xiàn)對(duì)當(dāng)前環(huán)境下光度強(qiáng)弱的監(jiān)聽。
具體步驟如下:
  讀取設(shè)備上的傳感器對(duì)象,代碼如例1-2所示:
例1-2
manager =        (SensorManager) getSystemService(SENSOR_SERVICE);
   //指定傳感器的類型,獲取該傳感器對(duì)象
   Sensor sensor = manager.getDefaultSensor(Sensor.TYPE_LIGHT);
復(fù)制代碼
  編寫監(jiān)聽器,代碼如例1-3所示:
例1-3
public class MyListener implements  SensorEventListener {
    //當(dāng)傳感器的精度發(fā)生變化時(shí)調(diào)用這個(gè)方法
        @Override
        public void onAccuracyChanged(Sensor arg0, int arg1) {
        
        }
    //當(dāng)傳感器檢測(cè)的數(shù)據(jù)發(fā)生變化時(shí)調(diào)用這個(gè)方法
        @Override
        public void onSensorChanged(SensorEvent arg0) {
         float light = arg0.values[0];
         System.out.println("光線強(qiáng)度的大小:===="+light);
        }
}
復(fù)制代碼
編寫MyListener內(nèi)部類使之實(shí)現(xiàn)SensorEventListener接口,并重寫onAccuracyChanged方法和onSensorChanged方法,在
光線輕度發(fā)送變化時(shí)回調(diào)第二個(gè)方法。SensorEvent.values是一個(gè)數(shù)據(jù)對(duì)象,該數(shù)據(jù)的第一個(gè)數(shù)值就是光線的大小,系統(tǒng)中是
一個(gè)float類型的數(shù)字來表示,該數(shù)值越大這對(duì)應(yīng)的光線強(qiáng)度就越大。
  注冊(cè)監(jiān)聽事件
我們已經(jīng)獲取了該傳感器對(duì)象,也編寫了該對(duì)象的監(jiān)聽器,最后需要做的就是給這個(gè)傳感器對(duì)象注冊(cè)監(jiān)聽事件。代碼如例1-4:
例1-4
myListener=new MyListener();
   manager.registerListener(myListener, sensor, SensorManager.SENSOR_DELAY_FASTEST);
復(fù)制代碼
  解除監(jiān)聽事件
系統(tǒng)光感傳感器不停的獲取當(dāng)前環(huán)境的光度服務(wù)已經(jīng)被開啟,當(dāng)我們?cè)谕顺鲈搼?yīng)用時(shí),一定要記得關(guān)閉該服務(wù),否則后臺(tái)會(huì)一致
運(yùn)行這個(gè)服務(wù),會(huì)效果系統(tǒng)資源。具體代碼如例 1-5所示:
例1-5
@Override
protected void onDestroy() {
        manager.unregisterListener(myListener);
        super.onDestroy();
}
復(fù)制代碼
運(yùn)行程序,選擇在真機(jī)(本例為小米3),效果如圖1-2所示:
本文版權(quán)歸黑馬程序員Android+物聯(lián)網(wǎng)培訓(xùn)學(xué)院所有,歡迎轉(zhuǎn)載,轉(zhuǎn)載請(qǐng)注明作者出處。謝謝!
作者:黑馬程序員Android+物聯(lián)網(wǎng)培訓(xùn)學(xué)院
首發(fā):http://android.ithaima.com

分享到:
在線咨詢 我要報(bào)名
和我們?cè)诰€交談!