Android:DisplayMetrics densityDpi在有根设备上返回零

时间:2014-12-21 14:20:58

标签: android metrics zero rooted-device

短问题

在root设备上,DisplayMetrics.densityDpi似乎为零。

长期问题

我在我的应用中使用以下代码:

public static int getIconSize(Activity activity) {

    int size;

    DisplayMetrics metrics = new DisplayMetrics();
    activity.getWindowManager().getDefaultDisplay().getMetrics(metrics);

    switch (metrics.densityDpi) {
    case DisplayMetrics.DENSITY_LOW:
        size = 36;
        break;
    case DisplayMetrics.DENSITY_MEDIUM:
        size = 48;
        break;
    case DisplayMetrics.DENSITY_TV:
        size = 64;
        break;
    case DisplayMetrics.DENSITY_HIGH:
        size = 72;
        break;
    case DisplayMetrics.DENSITY_XHIGH:
        size = 96;
        break;
    case DisplayMetrics.DENSITY_400:
        size = 120;
        break;
    case DisplayMetrics.DENSITY_XXHIGH:
        size = 144;
        break;
    case DisplayMetrics.DENSITY_560:
        size = 168;
        break;
    case DisplayMetrics.DENSITY_XXXHIGH:
        size = 192;
        break;
    default:
        size = (int) (metrics.densityDpi * (3/10));
    }   
    return size;
}

我使用它来缩放我的应用程序在运行时制作的图标以及我从其他应用程序获得的缩放图标,因为它们的大小并不总是正确。

这很好用,但在(某些)root设备上似乎失败了。大小返回为零,因此从代码中我们可以得出结论,metrics.densityDpi必须等于零。 (我没有根电话来测试这个)

我已查看清单的<supports-screens>部分,但似乎默认值是我需要的值。

有谁知道为什么会发生这种情况并可能解决?

谢谢

1 个答案:

答案 0 :(得分:2)

看起来像rooted phone并不总是返回densityDpi的值。我通过在最后添加这个问题来解决这个问题。密度似乎是正确的。

    if (size == 0) {
        size = (int) (metrics.density * 48);
    }