android设备密度信息和英寸获取

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);
    }

猜你喜欢

转载自blog.csdn.net/nailsoul/article/details/81288054
今日推荐