content: package com.rsen.github.androidutilcode;
  
  import android.app.Activity;
  import android.app.KeyguardManager;
  import android.content.Context;
  import android.content.pm.ActivityInfo;
  import android.content.res.Configuration;
  import android.graphics.Bitmap;
  import android.util.DisplayMetrics;
  import android.view.Surface;
  import android.view.View;
  import android.view.WindowManager;
  
  /**
   * <pre>
   *     author: Blankj
   *     blog  : http://blankj.com
   *     time  : 2016/8/2
   *     desc  : 屏幕相关工具类
   * </pre>
   */
  public class ScreenUtils {
  
      private ScreenUtils() {
          throw new UnsupportedOperationException("u can't instantiate me...");
      }
  
      /**
       * 获取屏幕的宽度px
       *
       * @param context 上下文
       * @return 屏幕宽px
       */
      public static int getScreenWidth(Context context) {
          WindowManager windowManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
          DisplayMetrics dm = new DisplayMetrics();// 创建了一张白纸
          windowManager.getDefaultDisplay().getMetrics(dm);// 给白纸设置宽高
          return dm.widthPixels;
      }
  
      /**
       * 获取屏幕的高度px
       *
       * @param context 上下文
       * @return 屏幕高px
       */
      public static int getScreenHeight(Context context) {
          WindowManager windowManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
          DisplayMetrics dm = new DisplayMetrics();// 创建了一张白纸
          windowManager.getDefaultDisplay().getMetrics(dm);// 给白纸设置宽高
          return dm.heightPixels;
      }
  
      /**
       * 设置屏幕为横屏
       * <p>还有一种就是在Activity中加属性android:screenOrientation="landscape"</p>
       * <p>不设置Activity的android:configChanges时，切屏会重新调用各个生命周期，切横屏时会执行一次，切竖屏时会执行两次</p>
       * <p>设置Activity的android:configChanges="orientation"时，切屏还是会重新调用各个生命周期，切横、竖屏时只会执行一次</p>
       * <p>设置Activity的android:configChanges="orientation|keyboardHidden|screenSize"（4.0以上必须带最后一个参数）时
       * 切屏不会重新调用各个生命周期，只会执行onConfigurationChanged方法</p>
       *
       * @param activity activity
       */
      public static void setLandscape(Activity activity) {
          activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
      }
  
      /**
       * 设置屏幕为竖屏
       *
       * @param activity activity
       */
      public static void setPortrait(Activity activity) {
          activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
      }
  
      /**
       * 判断是否横屏
       *
       * @param context 上下文
       * @return {@code true}: 是<br>{@code false}: 否
       */
      public static boolean isLandscape(Context context) {
          return context.getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE;
      }
  
      /**
       * 判断是否竖屏
       *
       * @param context 上下文
       * @return {@code true}: 是<br>{@code false}: 否
       */
      public static boolean isPortrait(Context context) {
          return context.getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT;
      }
  
      /**
       * 获取屏幕旋转角度
       *
       * @param activity activity
       * @return 屏幕旋转角度
       */
      public static int getScreenRotation(Activity activity) {
          switch (activity.getWindowManager().getDefaultDisplay().getRotation()) {
              default:
              case Surface.ROTATION_0:
                  return 0;
              case Surface.ROTATION_90:
                  return 90;
              case Surface.ROTATION_180:
                  return 180;
              case Surface.ROTATION_270:
                  return 270;
          }
      }
  
      /**
       * 获取当前屏幕截图，包含状态栏
       *
       * @param activity activity
       * @return Bitmap
       */
      public static Bitmap captureWithStatusBar(Activity activity) {
          View view = activity.getWindow().getDecorView();
          view.setDrawingCacheEnabled(true);
          view.buildDrawingCache();
          Bitmap bmp = view.getDrawingCache();
          DisplayMetrics dm = new DisplayMetrics();
          activity.getWindowManager().getDefaultDisplay().getMetrics(dm);
          Bitmap ret = Bitmap.createBitmap(bmp, 0, 0, dm.widthPixels, dm.heightPixels);
          view.destroyDrawingCache();
          return ret;
      }
  
      /**
       * 获取当前屏幕截图，不包含状态栏
       *
       * @param activity activity
       * @return Bitmap
       */
      public static Bitmap captureWithoutStatusBar(Activity activity) {
          View view = activity.getWindow().getDecorView();
          view.setDrawingCacheEnabled(true);
          view.buildDrawingCache();
          Bitmap bmp = view.getDrawingCache();
          int statusBarHeight = BarUtils.getStatusBarHeight(activity);
          DisplayMetrics dm = new DisplayMetrics();
          activity.getWindowManager().getDefaultDisplay().getMetrics(dm);
          Bitmap ret = Bitmap.createBitmap(bmp, 0, statusBarHeight, dm.widthPixels, dm.heightPixels - statusBarHeight);
          view.destroyDrawingCache();
          return ret;
      }
  
      /**
       * 判断是否锁屏
       *
       * @param context 上下文
       * @return {@code true}: 是<br>{@code false}: 否
       */
      public static boolean isScreenLock(Context context) {
          KeyguardManager km = (KeyguardManager) context
                  .getSystemService(Context.KEYGUARD_SERVICE);
          return km.inKeyguardRestrictedInputMode();
      }
  }
  