• Android Lock Screen Orientation


    Build.VERSION:Various version strings.

    android.os.Build.VERSION.SDK_INT:The user-visible SDK version of the framework; its possible values are defined in Build.VERSION_CODES.

    Build.VERSION_CODES:Enumeration of the currently known SDK version codes. These are the values that can be found in SDK. Version numbers increment monotonically with each official platform release.

    android.os.Build.VERSION_CODES.FROYO:June 2010: Android 2.2

    The REVERSE_LANDSCAPE and REVERSE_PORTRAIT appear after android 2.3,so we can not use them on android 2.2 and former devices.

    private void disableRotation()
        {       
            final int orientation = getResources().getConfiguration().orientation;
            final int rotation = getWindowManager().getDefaultDisplay().getOrientation();
    
            // Copied from Android docs, since we don't have these values in Froyo 2.2
            int SCREEN_ORIENTATION_REVERSE_LANDSCAPE = 8;
            int SCREEN_ORIENTATION_REVERSE_PORTRAIT = 9;
    
            if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.FROYO)
            {
                SCREEN_ORIENTATION_REVERSE_LANDSCAPE = ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE;
                SCREEN_ORIENTATION_REVERSE_PORTRAIT = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT;
            }
    
            if (rotation == Surface.ROTATION_0 || rotation == Surface.ROTATION_90)
            {
                if (orientation == Configuration.ORIENTATION_PORTRAIT){
                    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
                }
                else if (orientation == Configuration.ORIENTATION_LANDSCAPE){
                    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
                }
            }
            else if (rotation == Surface.ROTATION_180 || rotation == Surface.ROTATION_270) 
            {
                if (orientation == Configuration.ORIENTATION_PORTRAIT){
                    setRequestedOrientation(SCREEN_ORIENTATION_REVERSE_PORTRAIT);
                }
                else if (orientation == Configuration.ORIENTATION_LANDSCAPE){
                    setRequestedOrientation(SCREEN_ORIENTATION_REVERSE_LANDSCAPE);
                }
            }
        }

    enable the rotation:

    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED);

    About the rotation and orientation,on some devices,the Surface.ROTATION_0 corresponds to ORIENTATION_LANDSCAPE,but others,may ORIENTATION_PORTRAIT.So we have to so some work to judge it.

    However,for some reason ROTATION_90 corresponds to SCREEN_ORIENTATION_REVERSE_PORTRAIT on the Xoom if you use the above method.So another method appears:

     private void disableRotation()
        {       
            final int orientation = getResources().getConfiguration().orientation;
            final int rotation = getWindowManager().getDefaultDisplay().getOrientation();
    
            // Copied from Android docs, since we don't have these values in Froyo 2.2
            int SCREEN_ORIENTATION_REVERSE_LANDSCAPE = 8;
            int SCREEN_ORIENTATION_REVERSE_PORTRAIT = 9;
    
            if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.FROYO)
            {
                SCREEN_ORIENTATION_REVERSE_LANDSCAPE = ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE;
                SCREEN_ORIENTATION_REVERSE_PORTRAIT = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT;
            }
    
            if (orientation == Configuration.ORIENTATION_PORTRAIT) {
                if (rotation == Surface.ROTATION_0|| rotation == Surface.ROTATION_270) 
                    // 0 for phone, 270 for tablet
                {
                    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
                } else {
                    setRequestedOrientation(SCREEN_ORIENTATION_REVERSE_PORTRAIT);
                }
            } else {
                if (rotation == Surface.ROTATION_90|| rotation == Surface.ROTATION_0) 
                    // 90 for phone, 0 for tablet
                {
                    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
                } else {
                    setRequestedOrientation(SCREEN_ORIENTATION_REVERSE_LANDSCAPE);
                }
            }
            
    //        if (rotation == Surface.ROTATION_0 || rotation == Surface.ROTATION_90)
    //        {
    //            if (orientation == Configuration.ORIENTATION_PORTRAIT){
    //                setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
    //            }
    //            else if (orientation == Configuration.ORIENTATION_LANDSCAPE){
    //                setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
    //            }
    //        }
    //        else if (rotation == Surface.ROTATION_180 || rotation == Surface.ROTATION_270) 
    //        {
    //            if (orientation == Configuration.ORIENTATION_PORTRAIT){
    //                setRequestedOrientation(SCREEN_ORIENTATION_REVERSE_PORTRAIT);
    //            }
    //            else if (orientation == Configuration.ORIENTATION_LANDSCAPE){
    //                setRequestedOrientation(SCREEN_ORIENTATION_REVERSE_LANDSCAPE);
    //            }
    //        }
        }

    i'm not sure the note "//0 for phone, 270 for tablet" and "// 90 for phone, 0 for tablet" are right on any device,but at least it works well in my device.so I use the latter one.

    When you want to disable/enable the autorotation of the device ,you have to write the settings.

  • 相关阅读:
    Web应用Word生成
    记 Ubuntu14.04 Monodevelop 安装的两个问题
    CSDN上下载的一些关于Android程序调用Webservice执行不成功的问题
    Binary Search Tree Iterator
    算法之贪心算法
    《SAS编程与数据挖掘商业案例》学习笔记之十七
    数据库设计之半结构化存储
    Timus 1446. Sorting Hat 分类问题
    WebGL on iOS8 最终等到了这一天
    仿netty线程池简化版本
  • 原文地址:https://www.cnblogs.com/qiengo/p/2547518.html
Copyright © 2020-2023  润新知