2011-02-05 14 views

Respuesta

45

Esto debe hacer el truco para usted:

import android.provider.Settings; 
    public static void setAutoOrientationEnabled(Context context, boolean enabled) 
    { 
      Settings.System.putInt(context.getContentResolver(), Settings.System.ACCELEROMETER_ROTATION, enabled ? 1 : 0); 
    } 

Añadir permiso al AndroidManifest.xml

<uses-permission android:name="android.permission.WRITE_SETTINGS" /> 

Puede encontrar la documentación here

+2

Esto parece funcionar, pero te bloquea, me bloquea la orientación del paisaje, incluso si estoy en retrato. Estoy probando en una tableta de nido de abeja, así que no estoy seguro de si hay alguna diferencia ... ¿Es este el comportamiento esperado? – christoff

+0

¿Se puede hacer comprar solo la configuración, sin el permiso? Estoy tratando de encontrar una respuesta para este https://stackoverflow.com/questions/44196296/application-enables-orientation-change-button-is-status-bar. –

2

Siempre utilizar especificado por el usuario orientación de la pantalla, esto aplicará cualquier orientación que el usuario haya elegido y no rotará la pantalla si está desactivada.

activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_USER); 
1

Esta es mi impetración para este problema. Tuve que implementar un botón que tenía la misma función que el botón de bloqueo en el menú de configuración.

puede utilizar las setRotationScreenFromSettings para resolver su problema

public static boolean getRotationScreenFromSettingsIsEnabled(Context context) 
{ 

    int result = 0; 
    try 
    { 
     result = Settings.System.getInt(context.getContentResolver(), Settings.System.ACCELEROMETER_ROTATION); 
    } 
    catch (Settings.SettingNotFoundException e) 
    { 
     e.printStackTrace(); 
    } 

    return result == 1; 
} 



public static void setRotationScreenFromSettings(Context context, boolean enabled) 
{ 
    try 
    { 
     if (Settings.System.getInt(context.getContentResolver(), Settings.System.ACCELEROMETER_ROTATION) == 1) 
     { 
      Display defaultDisplay = ((WindowManager) context.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay(); 
      Settings.System.putInt(context.getContentResolver(), Settings.System.USER_ROTATION, defaultDisplay.getRotation()); 
      Settings.System.putInt(context.getContentResolver(), Settings.System.ACCELEROMETER_ROTATION, 0); 
     } 
     else 
     { 
      Settings.System.putInt(context.getContentResolver(), Settings.System.ACCELEROMETER_ROTATION, 1); 
     } 

     Settings.System.putInt(context.getContentResolver(), Settings.System.ACCELEROMETER_ROTATION, enabled ? 1 : 0); 

    } 
    catch (Settings.SettingNotFoundException e) 
    { 
     e.printStackTrace(); 
    } 
} 

private void regirsterLockScreenOrientationChangedListner() 
{ 
    ContentObserver rotationObserver = new ContentObserver(new Handler()) 
    { 
     @Override 
     public void onChange(boolean selfChange) 
     { 
      refreshLockScreenOrientationBtn(); 
     } 
    }; 

    context.getContentResolver().registerContentObserver(Settings.System.getUriFor(Settings.System.ACCELEROMETER_ROTATION), 
      true, rotationObserver); 
}` 

Agregar permiso al AndroidManifest.xml

<uses-permission android:name="android.permission.WRITE_SETTINGS" /> 
1

Tienes que fijarla con onCreate siguiente código dentro de la función(). Trabajando ...

setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 
Cuestiones relacionadas