屏幕相关→ScreenUtils

   
  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.provider.Settings;
  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 final class ScreenUtils {
   
  private ScreenUtils() {
  throw new UnsupportedOperationException("u can't instantiate me...");
  }
   
  /**
  * 获取屏幕的宽度(单位:px)
  *
  * @return 屏幕宽px
  */
  public static int getScreenWidth() {
  WindowManager windowManager = (WindowManager) Utils.getContext().getSystemService(Context.WINDOW_SERVICE);
  DisplayMetrics dm = new DisplayMetrics();// 创建了一张白纸
  windowManager.getDefaultDisplay().getMetrics(dm);// 给白纸设置宽高
  return dm.widthPixels;
  }
   
  /**
  * 获取屏幕的高度(单位:px)
  *
  * @return 屏幕高px
  */
  public static int getScreenHeight() {
  WindowManager windowManager = (WindowManager) Utils.getContext().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);
  }
   
  /**
  * 判断是否横屏
  *
  * @return {@code true}: 是<br>{@code false}: 否
  */
  public static boolean isLandscape() {
  return Utils.getContext().getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE;
  }
   
  /**
  * 判断是否竖屏
  *
  * @return {@code true}: 是<br>{@code false}: 否
  */
  public static boolean isPortrait() {
  return Utils.getContext().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;
  }
   
  /**
  * 判断是否锁屏
  *
  * @return {@code true}: 是<br>{@code false}: 否
  */
  public static boolean isScreenLock() {
  KeyguardManager km = (KeyguardManager) Utils.getContext().getSystemService(Context.KEYGUARD_SERVICE);
  return km.inKeyguardRestrictedInputMode();
  }
   
  /**
  * 设置进入休眠时长
  * <p>需添加权限 {@code <uses-permission android:name="android.permission.WRITE_SETTINGS" />}</p>
  *
  * @param duration 时长
  */
  public static void setSleepDuration(int duration) {
  Settings.System.putInt(Utils.getContext().getContentResolver(), Settings.System.SCREEN_OFF_TIMEOUT, duration);
  }
   
  /**
  * 获取进入休眠时长
  *
  * @return 进入休眠时长,报错返回-123
  */
  public static int getSleepDuration() {
  try {
  return Settings.System.getInt(Utils.getContext().getContentResolver(), Settings.System.SCREEN_OFF_TIMEOUT);
  } catch (Settings.SettingNotFoundException e) {
  e.printStackTrace();
  return -123;
  }
  }
  }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值