Java 跨平台版本锁定屏幕方向的正确方法

Java 跨平台版本锁定屏幕方向的正确方法,java,android,user-interface,screen-orientation,Java,Android,User Interface,Screen Orientation,我意识到这是一个重复的问题,但自从安卓2.3+(姜饼)发布以来,还没有一个明确的答案被发布和接受 我有检索Froyo手机和蜂窝平板电脑当前屏幕方向的代码。我的问题是: 在我检索到的姜饼前版本的两个方向中, 我应该用哪一个 我应该使用什么方法设置方向/旋转以将其锁定到位 这是我现在使用的方法(检索,但不是设置) 受保护的void lockCurrentOrientation(){ 智力定向; 显示=((WindowManager)getSystemService(窗口服务)).getDefault

我意识到这是一个重复的问题,但自从安卓2.3+(姜饼)发布以来,还没有一个明确的答案被发布和接受

我有检索Froyo手机和蜂窝平板电脑当前屏幕方向的代码。我的问题是:

  • 在我检索到的姜饼前版本的两个方向中, 我应该用哪一个
  • 我应该使用什么方法设置方向/旋转以将其锁定到位
  • 这是我现在使用的方法(检索,但不是设置)

    受保护的void lockCurrentOrientation(){
    智力定向;
    显示=((WindowManager)getSystemService(窗口服务)).getDefaultDisplay();
    if(Build.VERSION.SDK_INT
    如果要针对较旧的版本,请使用getOrientation();如果要针对较新的版本,请使用getRotation()。所谓目标,我指的是您在清单文件中的目标sdk中放入的任何内容。

    我的代码示例已经做到了这一点。我在问什么是正确的设置方式。在旋转的情况下,文档说明返回的值是相对于设备“自然方向”的角度,但我知道如何设置方向的唯一方法是通过setRequestedOrientation传递引用方向值的常量,而不是相对于自然方向的角度
    protected void lockCurrentOrientation() {
    
        int orientation;
        Display display = ((WindowManager) getSystemService(WINDOW_SERVICE)).getDefaultDisplay();
        if(Build.VERSION.SDK_INT < Build.VERSION_CODES.GINGERBREAD)
        {
            orientation = getResources().getConfiguration().orientation;
            Log.d(LogTag, "Orientation via getConfiguration " + String.valueOf(orientation));
    
            // Not working - reporting -1 (SCREEN_ORIENTATION_UNSPECIFIED)
            // orientation = getRequestedOrientation();
            // Log.d(LogTag, "Orientation via getRequestedOrientation " + String.valueOf(orientation));
    
            orientation = display.getOrientation();
            Log.d(LogTag, "Orientation via WindowManager " + String.valueOf(orientation));
        }
        else
        {
            orientation = display.getRotation();
            Log.d(LogTag, "Orientation via Display.getRotation " + String.valueOf(orientation));
        }
    }