Android:某些设备的设备密度返回为零

Android:某些设备的设备密度返回为零,android,Android,某些设备的设备密度返回0。以下代码用于计算设备密度: WindowManager wm = (WindowManager) context .getSystemService(Context.WINDOW_SERVICE); DisplayMetrics metrics = new DisplayMetrics(); wm.getDefaultDisplay().getMetrics(metrics); density = metrics.density; 这导致PlaySto

某些设备的设备密度返回0。以下代码用于计算设备密度:

WindowManager wm = (WindowManager) context
        .getSystemService(Context.WINDOW_SERVICE);
DisplayMetrics metrics = new DisplayMetrics();
wm.getDefaultDisplay().getMetrics(metrics);
density = metrics.density;
这导致PlayStore出现一些崩溃。用户似乎正在使用:Galaxy Y Plus;Android版本4.0.3-4.0.4。另外,一个名为wing-k70的设备也出现了问题。在一次崩溃中,它是版本4.2


请给出建议。

尝试以下操作,它在API级别4之前就存在一些问题

DisplayMetrics metrics = getResources().getDisplayMetrics();
int densityDpi = (int)(metrics.density * 160f);

这种方法适用于API 4级或更高级别的我:

DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);
switch(metrics.densityDpi){
     case DisplayMetrics.DENSITY_LOW:
                break;
     case DisplayMetrics.DENSITY_MEDIUM:
                 break;
     case DisplayMetrics.DENSITY_HIGH:
                 break;
}

除了优雅地处理这件事,你能做的不多。
如果密度为null或0,请检查它并在本例中使用默认值。

获取DPI的一个好方法是为每个密度生成一个string.xml文件

创建名为values mdpi、values hdpi、values xhdpi的文件夹。。。并在everyone中添加一个strings.xml,其中包含一个名为density的字符串,该字符串的值为density(位于值mdpi中的strings.xml的mdpi,等等)


然后读取R.string.density将为您提供正确的密度

对不起,穆塔扎。这行不通。正如我在问题中提到的,这与Android版本4之前的设备无关。这发生在版本为4+的设备上是随机的还是每次在这些设备上都给出0?注意,根设备可能存在问题。即使有解决方案可以找到这些特定设备的密度,这种情况很可能会在其他型号的产品中再次发生。请不要对多个问题给出相同的答案。发布一个好的答案,然后投票/标记以重复结束其他问题。如果问题不是重复的,请根据问题定制您的答案。我没有将此答案作为重复删除的唯一原因是此问题是慷慨的,您不能投票将其作为重复关闭。如果这篇文章不是重复的,确保适当地调整你的答案。