您的位置:首页 > 其它

获取屏幕相关信息工具类

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;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: