¿Habilitar y deshabilitar la rotación automática mediante progtwigción?

Hay muchos widgets geniales que habilitarán y desactivarán la rotación automática en su teléfono. Al deshabilitarlo, se desactiva en todas las aplicaciones del teléfono.

¿Alguna idea de cómo lo están logrando?

Esto debería hacer el truco para ti:

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

Agregar permiso a AndroidManifest.xml

  

Puedes encontrar la documentación aquí

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

 activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_USER); 

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 locking en el menú de configuración.

puede usar 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 a AndroidManifest.xml

  

Tienes que arreglarlo usando el siguiente código en la función onCreate (). Trabajando…

 setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);