zoukankan      html  css  js  c++  java
  • 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.

  • 相关阅读:
    网页支付宝接口使用
    @Valid注解的使用springmvc pojo校验
    Git
    面试宝典
    Navicat 破解版(操作非常简单)
    JAVA中List,Map,Set接口的区别
    java 枚举示例
    springcloud和springboot是什么关系?
    java面试经常涉及到的
    asp.net 报错 SAP 报错 试图加载格式不正确的程序。 (异常来自 HRESULT:0x8007000B)
  • 原文地址:https://www.cnblogs.com/qiengo/p/2547518.html
Copyright © 2011-2022 走看看