我們已經(jīng)了解了傳感器的工作原理和常見的傳感器,下面我們要學(xué)習(xí)的是:了解Android中傳感器相關(guān)的API以及如何使用這些
傳感器。
新建工程
【File】——>【new】——>【Android Application Project】命名為:12_傳感器入門
讀設(shè)備傳感器
在程序中通過代碼遍歷當(dāng)前設(shè)備存在的傳感器種類,每一個設(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ī)上測試(本例中小米3),此時logcat打印如圖1-1所示:
讀指定傳感器
如何在程序中讀取某一指定的傳感器對象,下面我們將通過代碼讀取設(shè)備上的光感傳感器并實(shí)現(xiàn)對當(dāng)前環(huán)境下光度強(qiáng)弱的監(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 {
//當(dāng)傳感器的精度發(fā)生變化時調(diào)用這個方法
@Override
public void onAccuracyChanged(Sensor arg0, int arg1) {
}
//當(dāng)傳感器檢測的數(shù)據(jù)發(fā)生變化時調(diào)用這個方法
@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ā)送變化時回調(diào)第二個方法。SensorEvent.values是一個數(shù)據(jù)對象,該數(shù)據(jù)的第一個數(shù)值就是光線的大小,系統(tǒng)中是
一個float類型的數(shù)字來表示,該數(shù)值越大這對應(yīng)的光線強(qiá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)光感傳感器不停的獲取當(dāng)前環(huán)境的光度服務(wù)已經(jīng)被開啟,當(dāng)我們在退出該應(yīng)用時,一定要記得關(guān)閉該服務(wù),否則后臺會一致
運(yùn)行這個服務(wù),會效果系統(tǒng)資源。具體代碼如例 1-5所示:
例1-5
@Override
protected void onDestroy() {
manager.unregisterListener(myListener);
super.onDestroy();
}
復(fù)制代碼
運(yùn)行程序,選擇在真機(jī)(本例為小米3),效果如圖1-2所示: