运行4.4.2的SPH-L710(Sprint Galaxy S III)误报了xdpi和ydpi

bre*_*ead 8 android dpi galaxy samsung-mobile android-4.4-kitkat

我们最近注意到一个数据异常,因为许多设备通过DisplayMetrics误报了他们的xdpi和ydpi.

作为一个具体的例子,运行4.4.2的所有SPH-L710 Sprint Galaxy S III设备报告的xdpi和ydpi为~160.分辨率为1280x720,这可以测量到~9英寸的屏幕尺寸,显然不是这种情况.在4.4.2之前,该设备模型分别正确报告其xdpi和ydpi:~304和~306.

我们通过DisplayMetrics访问此信息,如下所示:

DisplayMetrics dm = getResources().getDisplayMetrics();
xdpi = dm.xdpi;
ydpi = dm.ydpi;
Run Code Online (Sandbox Code Playgroud)

有没有人注意到这些指标是不一致/不可靠的?有更准确的方法来访问这些信息吗?

编辑:我发现这篇关于xdpi/ydpi不准确的帖子.Romain和Dianne似乎都承认这个问题 - 所以DisplayMetrics文档没有记录这些不可靠的属性这一事实对我来说似乎是不负责任的.

Dal*_*kar 1

从 API 17 开始,您可以调用getRealMetrics以获得更准确的结果。

DisplayMetrics dm = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getRealMetrics(dm);

xdpi = dm.xdpi;
ydpi = dm.ydpi;
Run Code Online (Sandbox Code Playgroud)

来自显示文档

公共无效getRealMetrics(DisplayMetrics outMetrics)

在 API 级别 17 中添加 根据此显示的实际大小获取显示指标。

尺寸根据显示器的当前旋转进行调整。

当窗口管理器模拟较小的显示器(使用 adb shell am display-size)时,实际尺寸可能小于屏幕的物理尺寸。

参数 outMetrics 用于接收指标的 DisplayMetrics 对象。