获取屏幕相关信息工具类
2018-04-02 18:24
316 查看
public class ScreenUtils { private ScreenUtils() { throw new UnsupportedOperationException("u can't instantiate me..."); } /** * 获取屏幕的宽度(单位:px) * * @return 屏幕宽 */ public static int getScreenWidth() { WindowManager wm = (WindowManager) Utils.getApp().getSystemService(Context.WINDOW_SERVICE); if (wm == null) { return Utils.getApp().getResources().getDisplayMetrics().widthPixels; } Point point = new Point(); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) { wm.getDefaultDisplay().getRealSize(point); } else { wm.getDefaultDisplay().getSize(point); } return point.x; } /** * 获取屏幕的高度(单位:px) * * @return 屏幕高 */ public static int getScreenHeight() { WindowManager wm = (WindowManager) Utils.getApp().getSystemService(Context.WINDOW_SERVICE); if (wm == null) { return Utils.getApp().getResources().getDisplayMetrics().heightPixels; } Point point = new Point(); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) { wm.getDefaultDisplay().getRealSize(point); } else { wm.getDefaultDisplay().getSize(point); } return point.y; } /** * 获取屏幕密度 * * @return 屏幕密度 */ public static float getScreenDensity() { return Utils.getApp().getResources().getDisplayMetrics().density; } /** * 获取屏幕密度 DPI * * @return 屏幕密度 DPI */ public static int getScreenDensityDpi() { return Utils.getApp().getResources().getDisplayMetrics().densityDpi; } /** * 设置屏幕为全屏 * * @param activity activity */ public static void setFullScreen(@NonNull final Activity activity) { activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN | WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS); } /** * 设置屏幕为横屏 * <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(@NonNull final Activity activity) { activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); } /** * 设置屏幕为竖屏 * * @param activity activity */ public static void setPortrait(@NonNull final Activity activity) { activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); } /** * 判断是否横屏 * * @return {@code true}: 是<br>{@code false}: 否 */ public static boolean isLandscape() { return Utils.getApp().getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE; } /** * 判断是否竖屏 * * @return {@code true}: 是<br>{@code false}: 否 */ public static boolean isPortrait() { return Utils.getApp().getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT; } /** * 获取屏幕旋转角度 * * @param activity activity * @return 屏幕旋转角度 */ public static int getScreenRotation(@NonNull final 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 screenShot(@NonNull final Activity activity) { return screenShot(activity, false); } /** * 截屏 * * @param activity activity * @return Bitmap */ public static Bitmap screenShot(@NonNull final Activity activity, boolean isDeleteStatusBar) { View decorView = activity.getWindow().getDecorView(); decorView.setDrawingCacheEnabled(true); decorView.buildDrawingCache(); Bitmap bmp = decorView.getDrawingCache(); DisplayMetrics dm = new DisplayMetrics(); activity.getWindowManager().getDefaultDisplay().getMetrics(dm); Bitmap ret; if (isDeleteStatusBar) { Resources resources = activity.getResources(); int resourceId = resources.getIdentifier("status_bar_height", "dimen", "android"); int statusBarHeight = resources.getDimensionPixelSize(resourceId); ret = Bitmap.createBitmap( bmp, 0, statusBarHeight, dm.widthPixels, dm.heightPixels - statusBarHeight ); } else { ret = Bitmap.createBitmap(bmp, 0, 0, dm.widthPixels, dm.heightPixels); } decorView.destroyDrawingCache(); return ret; } /** * 判断是否锁屏 * * @return {@code true}: 是<br>{@code false}: 否 */ public static boolean isScreenLock() { KeyguardManager km = (KeyguardManager) Utils.getApp().getSystemService(Context.KEYGUARD_SERVICE); return km != null && km.inKeyguardRestrictedInputMode(); } /** * 设置进入休眠时长 * <p>需添加权限 {@code <uses-permission android:name="android.permission.WRITE_SETTINGS" />}</p> * * @param duration 时长 */ public static void setSleepDuration(final int duration) { Settings.System.putInt( Utils.getApp().getContentResolver(), Settings.System.SCREEN_OFF_TIMEOUT, duration ); } /** * 获取进入休眠时长 * * @return 进入休眠时长,报错返回-123 */ public static int getSleepDuration() { try { return Settings.System.getInt( Utils.getApp().getContentResolver(), Settings.System.SCREEN_OFF_TIMEOUT ); } catch (Settings.SettingNotFoundException e) { e.printStackTrace(); return -123; } } /** * 判断是否是平板 * * @return {@code true}: 是<br>{@code false}: 否 */ public static boolean isTablet() { return (Utils.getApp().getResources().getConfiguration().screenLayout & Configuration.SCREENLAYOUT_SIZE_MASK) >= Configuration.SCREENLAYOUT_SIZE_LARGE; } }
相关文章推荐
- 获取屏幕像素及相关的信息
- Android中获取屏幕相关信息(屏幕大小,状态栏、标题栏高度)
- JS获取终端屏幕、浏览窗口的相关信息
- 安卓中获取手机的相关信息的工具类
- Android中获取屏幕相关信息(屏幕大小,状态栏、标题栏高度)
- 获取手机中所有apk相关信息的工具类
- Android中获取屏幕相关信息(屏幕大小,状态栏、标题栏高度)
- Android获取屏幕信息工具类
- android 系统版本信息工具类 获取设备型号 设置屏幕亮度 软键盘 获取屏幕高度宽度
- Android中获取屏幕相关信息(屏幕大小,状态栏、标题栏高度)
- 安卓不得不收藏的工具类之获取APP相关的信息
- Android 获取屏幕相关信息
- Android DisplayMetrics 获取和屏幕相关的信息
- 安卓获取屏幕宽高/分辨率相关信息的方式
- Android中获取屏幕相关信息(屏幕大小,状态栏、标题栏高度)
- 屏幕分辨率及获取屏幕相关信息(屏幕大小,状态栏、标题栏高度)
- Android中获取屏幕相关信息(屏幕大小,状态栏、标题栏高度)
- 【Android M】获取屏幕锁定的相关信息:“无”,“滑动”,“PIN码”,"图案","密码"
- android中获取屏幕相关信息
- Android 屏幕适配攻略(四)获取手机屏幕的相关信息 与动态设置控件的大小