2013-03-14 101 views
2

我面對我的新的應用程序是一個挑戰,我想找到的android手機屏幕面朝天花板或floor.Can我能夠與Android sensors.If使這個身體的任何嘗試這個,請您分享有價值的想法和教程如果可用。Android手機的屏幕位置發現

+1

爲什麼斜體,順便說一句? – njzk2 2013-03-14 10:30:19

+1

,爲什麼這被upvoted兩次? – njzk2 2013-03-14 10:30:43

+1

@ njzk2你有解決這個問題 – Sree 2013-03-14 10:37:14

回答

1

oncreate

sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE); 
    List<Sensor> sensorList = sensorManager 
      .getSensorList(Sensor.TYPE_ACCELEROMETER); 
    if (sensorList.size() > 0) { 
     accelerometerPresent = true; 
     accelerometerSensor = sensorList.get(0); 
    } 

註冊SensorEventListener

 sensorManager.registerListener(accelerometerListener, 
       accelerometerSensor, SensorManager.SENSOR_DELAY_NORMAL); 

SensorEventListener實施

private SensorEventListener accelerometerListener = new SensorEventListener() { 

    public void onAccuracyChanged(Sensor sensor, int accuracy) {    
    } 

    public void onSensorChanged(SensorEvent event) { 
     float z_value = event.values[2]; 
     if (z_value == 10) { 
      // up facing 
     } else if(z_value == -10) 
      // down facing 
     }   
    } 
}; 

在我的兩個設備就說明ž _values = 10,當它在水平面上並且在相反的情況下顯示時 - 10.檢查你的情況。

+0

你怎麼可以說z值手機屏幕面臨floor.I認爲我們只能從你的答案得到一個電話的上下運動。 – user2020354 2013-03-14 10:55:04

+0

您是否想要準確檢測設備何時與地面水平?在我的答案當設備屏幕移動到downwar或向上,將被檢測 – stinepike 2013-03-14 10:57:22

+0

是的,我想找到設備屏幕面臨地面或屋頂.. – user2020354 2013-03-14 10:59:28

1

可以使用SensorEventListener實現這一目標。看看我的下面的代碼,以便更好地理解。您也可以在開發人員文檔中查看this以獲取有關傳感器的更多信息。

import android.hardware.Sensor; 
import android.hardware.SensorEvent; 
import android.hardware.SensorEventListener; 
import android.hardware.SensorManager; 

public class SensorClass implements SensorEventListener { 
    private float mInR[]; 
    private float mI[]; 
    private float mGravity[]; 
    private float mGeomag[]; 
    private float mOrientVals[]; 

    final float rad2deg = 180/((float) Math.PI); 

    @Override 
    public void onAccuracyChanged(Sensor sensor, int accuracy) { 
     // Do something here when accuracy changed 
    } 

    @Override 
    public void onSensorChanged(SensorEvent event) { 
     float azimuth = 0f; 
     float pitch = 0f; 
     float roll = 0f; 

     // If the sensor data is unreliable return 
     if (event.accuracy == SensorManager.SENSOR_STATUS_UNRELIABLE) 
      return; 

     // Gets the value of the sensor that has been changed 
     switch (event.sensor.getType()){ 
     case Sensor.TYPE_ACCELEROMETER: 
      mGravity = event.values.clone(); 
      break; 
     case Sensor.TYPE_MAGNETIC_FIELD: 
      mGeomag = event.values.clone(); 
      break; 
     } 

     if (mGravity != null && mGeomag != null){ 
      // checks that the rotation matrix is found 
      if (SensorManager.getRotationMatrix(mInR, mI, mGravity, mGeomag)){ 

       // magnetic north and the horizon respectively 
       SensorManager.getOrientation(mInR, mOrientVals); 

       azimuth = mOrientVals[0]*rad2deg; 
       pitch = mOrientVals[1]*rad2deg; 
       roll = mOrientVals[2]*rad2deg; 
      } 
     } 
    } 
} 
+0

三江源@Neil在這其中一個給了我,當手機屏幕向下,up.Can你給一個樣品,如果屏幕的情況下發生這三個值 – user2020354 2013-03-14 10:47:52

+0

你將不得不使用滾動和俯仰的組合。當你使用音調時,音調的值應該是0,那麼手機就是水平的。如果手機朝上,滾動值將爲0,如果手機朝下,滾動值將<-170。使用日誌打印出來的值 – Neil 2013-03-14 10:58:53

+0

是的,我做同樣的方式,但相同的值可能是,如果手機移動到左側或右側(我的意思是相同的值可以在不同的條件下重複)發生 – user2020354 2013-03-14 11:02:08