安卓開發中的重力感應傳感器

     安卓開發中擁有多種傳感器,google提供了11種傳感器供應用層使用:加速度、磁力、方向、陀螺儀、光線、壓力(返回當前壓強)、溫度、接近(檢測物體與手機的距離)、重力、線性加速度和旋轉矢量。
     在使用傳感器以前,須要將工程中的類接口到SensorEventListener,接口後會有兩個重載方法來進行監聽,並取得感應檢測Sensor狀態。其中onAccuracyChanged()方法在感應檢測到Sensor的精密度有變化時被調用,onSensorChanged()方法是在感應檢測到Sensor的值有變化時被調用到。
     工程創建後,聲明SensorManager和Sensor兩個對象,經過三條語句完成對傳感器管理器,傳感器以及傳感器的註冊的操做:
        manager =(SensorManager)getSystemService(SENSOR_SERVICE);//得到傳感器的服務。
        sensor = manager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);//得到加速度傳感器服務
        manager.registerListener(this, sensor, SensorManager.SENSOR_DELAY_UI);//對傳感器服務進行註冊。
在傳感器服務的註冊方法中,有三個參數,三個參數分別爲:監聽sensor事件,Sensor目標種類,延遲時間的精度密度(包含FASTEST,GAME,UI,NORMAL四種狀況,FASTEST太靈敏用不到,GAME主要用於遊戲的開發,通常研發中使用UI和NORMAL)。完成了傳感器服務的註冊後,即可以進行感應數據的讀取。
public void onSensorChanged(SensorEvent event)
 {
  mgx = event.values[SensorManager.DATA_X];
  mgy = event.values[sensorManager.DATA_Y];
  if(mgx<2&&mgx>-2&&mgxold<-2)
  {WifiSend("1");}
  else if(mgx<2&&mgx>-2&&mgxold>2)
  {WifiSend("2");}
  else if(mgy<2&&mgy>-2&&mgyold<-2)
  {WifiSend("3");}
  else if(mgy<2&&mgy>-2&&mgyold>2)
  {WifiSend("4");}
  mgxold = mgx; mgyold = mgy;
 }
此段代碼的做用是經過對比先後兩次加速度傳感器的數據,來判別手機轉動的方式,而後對移動小車進行行進控制,達到重力感應控制小車的目的。web

    在使用完傳感器以後,須要在工程對傳感器服務進行註銷,避免當Activity在後天運行時消耗手機電量。 this

  SensorManager.unregisterListener(SensorEventListener, mSensor);google

相關文章
相關標籤/搜索