上圖是android系統(tǒng)架構(gòu)圖,從中可以得知,sensor必貫穿架構(gòu)的各個(gè)層次。按照架構(gòu)層次,下面從五個(gè)方面來分析sensor架構(gòu):
1. sensor架構(gòu)之App層;
2. sensor架構(gòu)之Framework層;
3. sensor架構(gòu)之Libraries層;
4. sensor架構(gòu)之HAL層;
5. sensor架構(gòu)之Driver。
1. sensor架構(gòu)之App層
下面以g-sensor為例,寫一個(gè)簡單的apk,看一下sensor在App層到底是如何工作的,一般需要下面四個(gè)步驟來實(shí)現(xiàn)一個(gè)sensor應(yīng)用。
Step1:通過getSystemService獲取sensor服務(wù),其實(shí)就是初始化一個(gè)SensorManager實(shí)例;
1 SensorManager mSensorManager = (SensorManager)getSystemService(SENSOR_SERVICE);
Step2:通過SensorManager的getDefaultSensor方法獲取指定類型的傳感器的sensor對(duì)象;
1 Sensor sensor = mSensorManager.getDefaultSensor(Sensor.TYPE_GRAVITY); // 重力感應(yīng)
Step3:實(shí)現(xiàn)SensorEventListener接口的onSensorChanged和onAccuracyChanged方法;
1 SensorEventListenerlsn = new SensorEventListener() {2 public void onSensorChanged(SensorEvent e) { 3 //當(dāng)傳感器的值發(fā)生變化時(shí),會(huì)執(zhí)行這里4 }5 6 public void onAccuracyChanged(Sensor s, int accuracy) { 7 //當(dāng)傳感器的精度變化時(shí),會(huì)執(zhí)行這里8 }9 };
Step4:通過SensorManager的registerListener方法注冊監(jiān)聽,獲取傳感器變化值。
1 mSensorManager.registerListener(lsn,sensor, SensorManager.SENSOR_DELAY_GAME);
注:當(dāng)傳感器的值發(fā)生變化時(shí),會(huì)調(diào)用onSensorChanged方法;當(dāng)傳感器的精度變化時(shí)會(huì)調(diào)用onAccuracyChanged方法。
完整示例代碼:
1 public class main extends Activity { 2 PRivate float x, y, z; 3 protected void onCreate(Bundle savedInstanceState) { 4 super.onCreate(savedInstanceState); 5 SensorManager mSensorManager= (SensorManager) getSystemService(SENSOR_SERVICE); 6 Sensor sensor = mSensorManager.getDefaultSensor(Sensor.TYPE_GRAVITY); 7 SensorEventListener lsn = new SensorEventListener() { 8 9 public void onSensorChanged(SensorEvent e) { 10 System.out.println(e.value[0]); 11 System.out.println(e.value[1]); 12 System.out.println(e.value[2]); 13 } 14 public void onAccuracyChanged(Sensor s, int accuracy) { 15 } 16 }; 17 mSensorManager.registerListener(lsn, sensor, SensorManager.SENSOR_DELAY_GAME); 18 }
新聞熱點(diǎn)
疑難解答
圖片精選