以编程方式启用和禁用自动旋转?

时间:2011-02-05 16:32:57

标签: android

有许多很酷的小部件可以启用和禁用手机上的自动旋转功能。禁用它可以在手机上的所有应用中关闭它。

他们是如何实现的?

4 个答案:

答案 0 :(得分:48)

这应该适合你:

    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" />

您可以找到文档here

答案 1 :(得分:5)

始终使用用户指定的屏幕方向,这将应用用户选择的任何方向,如果已禁用,则不会旋转屏幕。

activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_USER);

答案 2 :(得分:2)

这是我对这个问题的一种解决方法。我必须实现一个按钮,其功能与设置菜单中的锁定按钮相同。

您可以使用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" />

答案 3 :(得分:1)

你必须使用onCreate()函数中的以下代码来修复它。工作...

setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);