2011-02-05 76 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);