上圖是android系統架構圖,從中可以得知,sensor必貫穿架構的各個層次。按照架構層次,下面從五個方面來分析sensor架構:
1. sensor架構之App層;
2. sensor架構之Framework層;
3. sensor架構之Libraries層;
4. sensor架構之HAL層;
5. sensor架構之Driver。
1. sensor架構之App層
下面以g-sensor為例,寫一個簡單的apk,看一下sensor在App層到底是如何工作的,一般需要下面四個步驟來實現一個sensor應用。
Step1:通過getSystemService獲取sensor服務,其實就是初始化一個SensorManager實例;
1 SensorManager mSensorManager = (SensorManager)getSystemService(SENSOR_SERVICE);
Step2:通過SensorManager的getDefaultSensor方法獲取指定類型的傳感器的sensor對象;
1 Sensor sensor = mSensorManager.getDefaultSensor(Sensor.TYPE_GRAVITY); // 重力感應
Step3:實現SensorEventListener接口的onSensorChanged和onAccuracyChanged方法;
1 SensorEventListenerlsn = new SensorEventListener() {2 public void onSensorChanged(SensorEvent e) { 3 //當傳感器的值發生變化時,會執行這里4 }5 6 public void onAccuracyChanged(Sensor s, int accuracy) { 7 //當傳感器的精度變化時,會執行這里8 }9 };
Step4:通過SensorManager的registerListener方法注冊監聽,獲取傳感器變化值。
1 mSensorManager.registerListener(lsn,sensor, SensorManager.SENSOR_DELAY_GAME);
注:當傳感器的值發生變化時,會調用onSensorChanged方法;當傳感器的精度變化時會調用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 }
新聞熱點
疑難解答
圖片精選