2011-02-05 74 views

回答

45

这应该做的伎俩为您提供:

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

+2

这似乎工作,但它锁定你锁定横向方向,即使我在肖像。我正在测试蜂巢片,所以我不确定是否有区别....这是预期的行为吗? – christoff 2011-06-29 20:31:31

2

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

activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_USER); 
1

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

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

你必须使用下面的代码里面的onCreate()函数来解决它。工作...

setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);