Hai bisogno di un esempio Display
in primo luogo:
Display display = ((WindowManager) getSystemService(WINDOW_SERVICE)).getDefaultDisplay();
Poi l'orientamento può essere chiamato in questo modo:
int orientation = display.getOrientation();
controllare l'orientamento come la tua strada e utilizzare questo per cambiamento dell'orientamento:
setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
Spero che sia aiuta.
Aggiornamento:
Va bene, diciamo che hai un oAllow
var che è Boolean
e il valore predefinito è False
.
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
Display display = ((WindowManager) getSystemService(WINDOW_SERVICE)).getDefaultDisplay();
int orientation = display.getOrientation();
switch(orientation) {
case Configuration.ORIENTATION_PORTRAIT:
if(!oAllow) {
setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
}
break;
case Configuration.ORIENTATION_LANDSCAPE:
if(!oAllow) {
setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
break;
}
}
È possibile aggiungere più scelte.
Non ho provato questo esempio, ma almeno ti dice alcuni indizi su come risolvere. Dimmi se hai qualche errore.
UPDATE
getOrientation()
è già deprecato see here. Utilizzare invece getRotation()
.Per verificare se il dispositivo è in modalità orizzontale si può fare qualcosa di simile:
Display display = ((WindowManager) getSystemService(WINDOW_SERVICE))
.getDefaultDisplay();
int orientation = display.getRotation();
if (orientation == Surface.ROTATION_90
|| orientation == Surface.ROTATION_270) {
// TODO: add logic for landscape mode here
}
fonte
2012-02-29 23:58:03
Non è necessario per intercettare la richiesta e quindi consentire o negare. È possibile bloccare o liberare l'orientamento in anticipo. Ci sono anche più opzioni con questo metodo, come se consentire una rotazione di 180 gradi quando bloccato. Si prega di leggere la mia risposta qui sotto, piuttosto che quella selezionata. –