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

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

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

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

分享到:
在線咨詢 我要報名
和我們在線交談!