2013-02-19 17 views
7

Sie würden denken, dass es eine direkte Lösung geben würde. Der Android-Dokumentstatus lautet:Erste Orientierung von Android-Gerät

Der Orientierungssensor wurde in Android 2.2 (API-Ebene 8) veraltet. Anstatt rohe Daten vom Orientierungssensor zu verwenden, empfehlen wir , dass Sie die Methode getRotationMatrix() in Verbindung mit der Methode getOrientation() verwenden, um Orientierungswerte zu berechnen.

Doch sie bieten keine Lösung, wie getOrientation() und getRotationMatrix() zu implementieren. Ich habe mehrere Stunden damit verbracht, Beiträge von Entwicklern zu lesen, die diese Methoden verwenden, aber sie haben alle Code oder eine seltsame Implementierung eingefügt. Googling hat kein Tutorial zur Verfügung gestellt. Kann jemand bitte eine einfache Lösung mit diesen beiden Methoden einfügen, um die Orientierung zu erzeugen?

+0

so wollen Sie Gerät c aktuelle Orientierung? –

+0

Ja, aber es muss unabhängig vom tatsächlichen Bildschirm sein. Ein Dienst sollte in der Lage sein, die Ausrichtung zu bestimmen. – AndroidDev

+0

Sie möchten feststellen, ob sich das Gerät von einem Dienst im Hoch- oder Querformat befindet? –

Antwort

6

hier ist die Umsetzung für GetOrientation():

public int getscrOrientation() 
    { 
     Display getOrient = getWindowManager().getDefaultDisplay(); 

     int orientation = getOrient.getOrientation(); 

     // Sometimes you may get undefined orientation Value is 0 
     // simple logic solves the problem compare the screen 
     // X,Y Co-ordinates and determine the Orientation in such cases 
     if(orientation==Configuration.ORIENTATION_UNDEFINED){ 

      Configuration config = getResources().getConfiguration(); 
      orientation = config.orientation; 

      if(orientation==Configuration.ORIENTATION_UNDEFINED){ 
       //if height and widht of screen are equal then 
       // it is square orientation 
       if(getOrient.getWidth()==getOrient.getHeight()){ 
        orientation = Configuration.ORIENTATION_SQUARE; 
       }else{ //if widht is less than height than it is portrait 
        if(getOrient.getWidth() < getOrient.getHeight()){ 
         orientation = Configuration.ORIENTATION_PORTRAIT; 
        }else{ // if it is not any of the above it will defineitly be landscape 
         orientation = Configuration.ORIENTATION_LANDSCAPE; 
        } 
       } 
      } 
     } 
     return orientation; // return value 1 is portrait and 2 is Landscape Mode 
    } 

Und u kann auch dieses Beispiel beziehen, die die Verwendung der beiden Methoden darstellen:

 getOrientation and getRotationMatrix 

http://www.codingforandroid.com/2011/01/using-orientation-sensors-simple.html

+0

Das bekommt die Bildschirmausrichtung, die ich bereits im Code verwende. Ich glaube nicht, dass das die selbe Sache ist, wie die Ausrichtung des Geräts basierend auf Sensoren zu erhalten. In der Tat habe ich das sogar in der Vergangenheit versucht, und es wird nicht innerhalb eines Dienstes ohne Bildschirm funktionieren. Dienste greifen normalerweise nicht auf den Bildschirm zu und sollten in der Lage sein, die Geräteausrichtung von den Sensoren zu bestimmen. Die getOrientation und getRotationMatrix sind erforderlich. – AndroidDev

+0

Ich habe es ausprobiert, aber es gibt nicht die Ergebnisse, wie man erwarten würde. Ich habe gerade eine App aus dem App Store heruntergeladen, die alle Sensoren auf Ihrem Gerät anzeigt und wie sie funktionieren. Einer wird als Orientierungssensor bezeichnet und wenn Sie ihn verwenden, zeigt die App, wie der Sensor richtig funktioniert. Werte sollten sich nicht ändern (oder sehr wenig ändern), wenn Sie das Gerät nicht bewegen. Der Code im obigen Link liefert keine zuverlässigen Ergebnisse, aber die Werte springen überall herum. – AndroidDev

+0

Ich fange an zu denken, dass das Setzen eines Breakpoints und das Ausführen im Debug-Modus die Art beeinflussen könnte, wie die Sensoren gelesen werden. Ich werde versuchen, es ohne Debug zu laufen und die Werte anzuzeigen, wie sie aktualisiert werden und sehen, was passiert. – AndroidDev

4
public int getScreenOrientation() { 


// Query what the orientation currently really is. 
if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT)    { 
    return 1; // Portrait Mode 

}else if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) { 
    return 2; // Landscape mode 
} 
return 0; 
} 
2
protected void onResume() { 
    // change the screen orientation 
    if(getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) { 
     setContentView(R.layout.portrait); 
    } else if(getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) { 
     setContentView(R.layout.landscape); 
    } else { 
     setContentView(R.layout.oops); 
    } 
}