Подтвердить что ты не робот

Включить и отключить автоматическое вращение программно?

Есть много интересных виджетов, которые позволят включать и отключать автоматический поворот на вашем телефоне. Отключение его отключает его во всех приложениях на телефоне.

Любые идеи, как они это достигают?

4b9b3361

Ответ 1

Это должно сделать трюк для вас:

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

Добавить разрешение на AndroidManifest.xml

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

Вы можете найти документацию здесь

Ответ 2

Всегда используйте пользовательскую ориентацию экрана, это будет применяться независимо от того, какой пользователь ориентации выбрал и не будет вращать экран, если он отключен.

activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_USER);

Ответ 3

Вы должны исправить это, используя следующий код внутри функции onCreate(). Работа...

setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

Ответ 4

Это моя ошибка для этой проблемы. Мне пришлось реализовать кнопку, которая имела ту же функцию, что и кнопка блокировки из меню настроек.

вы можете использовать setRotationScreenFromSettings, чтобы решить вашу проблему.

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);
}`

Добавить разрешение на AndroidManifest.xml

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