2013-02-19 5 views
7

Można by pomyśleć, że istnieje proste rozwiązanie. Stan dokumentacji systemu Android:Orientacja urządzenia z systemem Android

Czujnik orientacji został przestarzały w systemie Android 2.2 (poziom API 8). Zamiast używać nieprzetworzonych danych z czujnika orientacji, zalecamy użycie metody getRotationMatrix() w połączeniu z metodą getOrientation() do obliczania wartości orientacji.

Jednak nie zapewniają rozwiązania w zakresie wdrażania getOrientation() i getRotationMatrix(). Spędziłem kilka godzin czytając posty tutaj na temat programistów używających tych metod, ale wszystkie częściowo wkleiły kod lub dziwną implementację. Googling nie dostarczył samouczka. Czy ktoś może wkleić proste rozwiązanie przy użyciu tych dwóch metod, aby wygenerować orientację?

+0

, więc chcesz urządzenie c orientacja na użytkownika? –

+0

Tak, ale musi to być niezależne od rzeczywistego ekranu. Usługa powinna być w stanie określić orientację. – AndroidDev

+0

Chcesz określić, czy urządzenie działa w trybie portretu czy poziomym? –

Odpowiedz

6

tutaj jest wdrożenie do 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 
    } 

A u może także przekazać ten przykład, który odzwierciedlają zastosowanie obu metod:

 getOrientation and getRotationMatrix 

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

+0

To dostaje orientację ekranu, którą już używam w kodzie. Nie wierzę, że to jest to samo, co uzyskanie orientacji urządzenia na podstawie czujników. W rzeczywistości próbowałem tego nawet w przeszłości i nie będzie działać w usłudze bez ekranu. Usługi zwykle nie uzyskują dostępu do ekranu i powinny być w stanie określić orientację urządzenia z czujników. Wymagane są metody getOrientation i getRotationMatrix. – AndroidDev

+0

Próbowałem go, ale nie daje wyników, jak można się spodziewać. Właśnie pobrałem aplikację ze sklepu z aplikacjami, która pokazuje wszystkie czujniki urządzenia i sposób ich działania. Jeden nazywa się czujnikiem orientacji i kiedy go używasz, aplikacja pokazuje, jak czujnik działa poprawnie. Wartości nie powinny się zmieniać (lub zmieniać bardzo niewiele), gdy nie przenosisz urządzenia. Kod w powyższym linku nie daje żadnych wiarygodnych wyników, ale wartości przeskakują w każdym miejscu. – AndroidDev

+0

Zaczynam myśleć, że wprowadzenie punktu przerwania i uruchomienie w trybie debugowania może wpłynąć na sposób odczytu czujników. Spróbuję uruchomić go bez debugowania i wyświetlać wartości w miarę ich aktualizacji i sprawdzania, co się stanie. – 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); 
    } 
}