教育行業(yè)A股IPO第一股(股票代碼 003032)

全國(guó)咨詢/投訴熱線:400-618-4000

Android培訓(xùn)之傳感器

更新時(shí)間:2016年03月25日16時(shí)56分 來(lái)源:傳智播客Android培訓(xùn)學(xué)院 瀏覽次數(shù):

我們已經(jīng)了解了傳感器的工作原理和常見(jiàn)的傳感器,下面我們要學(xué)習(xí)的是:了解Android中傳感器相關(guān)的API以及如何使用這些
傳感器。
新建工程
【File】——>【new】——>【Android Application Project】命名為:12_傳感器入門(mén)
讀設(shè)備傳感器
在程序中通過(guò)代碼遍歷當(dāng)前設(shè)備存在的傳感器種類,每一個(gè)設(shè)備上傳感器的有無(wú)以及傳感器的種類都不一樣。下例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ì)象,下面我們將通過(guò)代碼讀取設(shè)備上的光感傳感器并實(shí)現(xiàn)對(duì)當(dāng)前環(huán)境下光度強(qiáng)弱的監(jiān)聽(tīng)。
具體步驟如下:
  讀取設(shè)備上的傳感器對(duì)象,代碼如例1-2所示:
例1-2
manager =        (SensorManager) getSystemService(SENSOR_SERVICE);
   //指定傳感器的類型,獲取該傳感器對(duì)象
   Sensor sensor = manager.getDefaultSensor(Sensor.TYPE_LIGHT);
復(fù)制代碼
  編寫(xiě)監(jiān)聽(tīng)器,代碼如例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ù)制代碼
編寫(xiě)MyListener內(nèi)部類使之實(shí)現(xiàn)SensorEventListener接口,并重寫(xiě)onAccuracyChanged方法和onSensorChanged方法,在
光線輕度發(fā)送變化時(shí)回調(diào)第二個(gè)方法。SensorEvent.values是一個(gè)數(shù)據(jù)對(duì)象,該數(shù)據(jù)的第一個(gè)數(shù)值就是光線的大小,系統(tǒng)中是
一個(gè)float類型的數(shù)字來(lái)表示,該數(shù)值越大這對(duì)應(yīng)的光線強(qiáng)度就越大。
  注冊(cè)監(jiān)聽(tīng)事件
我們已經(jīng)獲取了該傳感器對(duì)象,也編寫(xiě)了該對(duì)象的監(jiān)聽(tīng)器,最后需要做的就是給這個(gè)傳感器對(duì)象注冊(cè)監(jiān)聽(tīng)事件。代碼如例1-4:
例1-4
myListener=new MyListener();
   manager.registerListener(myListener, sensor, SensorManager.SENSOR_DELAY_FASTEST);
復(fù)制代碼
  解除監(jiān)聽(tīng)事件
系統(tǒng)光感傳感器不停的獲取當(dāng)前環(huán)境的光度服務(wù)已經(jīng)被開(kāi)啟,當(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培訓(xùn)學(xué)院所有,歡迎轉(zhuǎn)載,轉(zhuǎn)載請(qǐng)注明作者出處。謝謝!
作者:傳智播客Android培訓(xùn)學(xué)院
首發(fā):http://xamj520.com/android/

0 分享到:
和我們?cè)诰€交談!