public class ScreenPrintUtil {
private static final String TAG = ScreenPrintUtil.class.getSimpleName();
public static void print(Activity act){
//getResources(act).getDisplayMetrics() as 方式1
//getWindowManager(act).getDefaultDisplay().getMetrics(md) as 方式2
//getWindowManager(act).getDefaultDisplay(); as display
//通过验证方式1和方式2获取到的宽度密度等信息完全一致
//display获取到的width和height 跟 方式1或2获取到的md里面的宽高一致 但是已过时还是不用的好
//size 和 resize和rect获取到的值一样
printDisplayMetricsByResources(act);
printDisplayMetricsByWindowManager(act);
printScreeenSizeByWindowManager(act);
printDeviceInch(act);
}
private static void printDeviceInch(Activity act) {
DisplayMetrics realDisplayMetrics = new DisplayMetrics();
getWindowManager(act).getDefaultDisplay().getRealMetrics(realDisplayMetrics);
BigDecimal width = new BigDecimal(realDisplayMetrics.widthPixels)
.divide(new BigDecimal(String.valueOf(realDisplayMetrics.xdpi)),50,RoundingMode.HALF_UP)
.divide(new BigDecimal(String.valueOf(realDisplayMetrics.xdpi)))
.pow(2);
BigDecimal height = new BigDecimal(realDisplayMetrics.heightPixels)
.divide(new BigDecimal(String.valueOf(realDisplayMetrics.ydpi)),50,RoundingMode.HALF_UP)
.pow(2);
BigDecimal sum = width.add(height);
BigDecimal longInch = sqrt(sum);
BigDecimal inch = longInch.setScale(1, RoundingMode.HALF_UP);
LogUtil.e(TAG,"printDeviceInch() inch:"+inch+" longInch:"+longInch);
}
//获得手机的宽度和高度像素单位为px
// 通过WindowManager获取
public static void printDisplayMetricsByWindowManager(Activity act) {
LogUtil.e(TAG, "=========================>printDisplayMetricsByWindowManager<=========================");
DisplayMetrics displayMetrics = new DisplayMetrics();//屏幕分辨率容器
DisplayMetrics realDisplayMetrics = new DisplayMetrics();
Display display = getWindowManager(act).getDefaultDisplay();
display.getMetrics(displayMetrics);
display.getRealMetrics(realDisplayMetrics);
int width = displayMetrics.widthPixels;
int height = displayMetrics.heightPixels;
float density = displayMetrics.density;
int densityDpi = displayMetrics.densityDpi;
LogUtil.e(TAG, "printDisplayMetricsByWindowManager() screenRatio: [" + width + "x" + height + "],density=" + density + ",densityDpi=" + densityDpi);
LogUtil.e(TAG, "printDisplayMetricsByWindowManager() screenDisplayMetrics: " + displayMetrics);
width = realDisplayMetrics.widthPixels;
height = realDisplayMetrics.heightPixels;
density = realDisplayMetrics.density;
densityDpi = realDisplayMetrics.densityDpi;
LogUtil.e(TAG, "printDisplayMetricsByWindowManager() realScreenRatio: [" + width + "x" + height + "],density=" + density + ",densityDpi=" + densityDpi);
LogUtil.e(TAG, "printDisplayMetricsByWindowManager() realScreenDisplayMetrics: " + realDisplayMetrics);
}
// 通过Resources获取
public static void printDisplayMetricsByResources(Activity act){
LogUtil.e(TAG,"=========================>printDisplayMetricsByResources<=========================");
DisplayMetrics mDisplayMetrics = getResources(act).getDisplayMetrics();
int width = mDisplayMetrics.widthPixels;
int height = mDisplayMetrics.heightPixels;
float density = mDisplayMetrics.density;
int densityDpi = mDisplayMetrics.densityDpi;
LogUtil.e(TAG,"printDisplayMetricsByResources() screenRatio: ["+width+"x"+height+"],density="+density+",densityDpi="+densityDpi);
LogUtil.e(TAG,"printDisplayMetricsByResources() screenDisplayMetrics: "+mDisplayMetrics);
}
// 获取屏幕的默认分辨率
public static void printScreeenSizeByWindowManager(Activity act){
LogUtil.e(TAG,"=========================>printScreeenSize<=========================");
Display mDisplay = getWindowManager(act).getDefaultDisplay();
int width = mDisplay.getWidth();
int height = mDisplay.getHeight();
LogUtil.e(TAG,"printScreeenSizeByWindowManager() width:"+width+" height:"+height);
Point size = new Point();
mDisplay.getSize(size);
LogUtil.e(TAG,"printScreeenSizeByWindowManager() size:"+size);
Point realSize = new Point();
mDisplay.getRealSize(realSize);
LogUtil.e(TAG,"printScreeenSizeByWindowManager() realSize:"+realSize);
Rect rect = new Rect();
mDisplay.getRectSize(rect);
LogUtil.e(TAG,"printScreeenSizeByWindowManager() rectSize:"+rect);
Point outSmallestSize = new Point();
Point outLargestSize = new Point();
mDisplay.getCurrentSizeRange(outSmallestSize,outLargestSize);
LogUtil.e(TAG,"printScreeenSizeByWindowManager() outSmallestSize:"+outSmallestSize);
LogUtil.e(TAG,"printScreeenSizeByWindowManager() outLargestSize:"+outLargestSize);
LogUtil.e(TAG,"printScreeenSizeByWindowManager() screenDisplay: "+mDisplay);
}
public static WindowManager getWindowManager(Activity act) {
return act.getWindowManager();
}
private static Resources getResources(Activity act) {
return act.getResources();
}
private static BigDecimal sqrt(BigDecimal num) {
if(num.compareTo(BigDecimal.ZERO) < 0) {
return BigDecimal.ZERO;
}
BigDecimal x = num.divide(new BigDecimal("2"), MathContext.DECIMAL128);
while(x.subtract(x = sqrtIteration(x, num)).abs().compareTo(new BigDecimal("0.0000000000000000000001")) > 0);
return x;
}
private static BigDecimal sqrtIteration(BigDecimal x, BigDecimal n) {
return x.add(n.divide(x, MathContext.DECIMAL128)).divide(new BigDecimal("2"), MathContext.DECIMAL128);
}