android 获取屏幕的物理尺寸

计算方法:获取到屏幕的分辨率:point.x和point.y,再取出屏幕的DPI(每英寸的像素数量),计算长和宽有多少英寸,即:point.x / dm.xdpi,point.y / dm.ydpi,屏幕的长和宽算出来了,再用勾股定理,计算出斜角边的长度,即屏幕尺寸。

/**
	 * 得到屏幕的物理尺寸,由于该尺寸是在出厂时,厂商写死的,所以仅供参考
	 * 计算方法:获取到屏幕的分辨率:point.x和point.y,再取出屏幕的DPI(每英寸的像素数量),
	 * 计算长和宽有多少英寸,即:point.x / dm.xdpi,point.y / dm.ydpi,屏幕的长和宽算出来了,
	 * 再用勾股定理,计算出斜角边的长度,即屏幕尺寸。
	 * @param context
	 * @return
	 */
	public static double getPhysicsScreenSize(Context context){
		WindowManager manager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
		Point point = new Point();
		manager.getDefaultDisplay().getRealSize(point);
		DisplayMetrics dm = context.getResources().getDisplayMetrics();
		int densityDpi = dm.densityDpi;//得到屏幕的密度值,但是该密度值只能作为参考,因为他是固定的几个密度值。
		double x = Math.pow(point.x / dm.xdpi, 2);//dm.xdpi是屏幕x方向的真实密度值,比上面的densityDpi真实。
		double y = Math.pow(point.y / dm.ydpi, 2);//dm.xdpi是屏幕y方向的真实密度值,比上面的densityDpi真实。
		double screenInches = Math.sqrt(x + y);
		return screenInches;
	}
注意: 此处displayMetrics不要使用context.getApplicationContext().getResources().getDisplayMetrics()来获取。

上面说到,DPI是由设备出厂时写死到设备里的,如果写入的DPI值不准确,当然计算不出准确的屏幕尺寸。这也是友盟统计里没有屏幕尺寸这一项的原因吧,所以计算出的屏幕尺寸只做参考。


猜你喜欢

转载自blog.csdn.net/zhizhuodewo6/article/details/80913853