Подтвердить что ты не робот

Android: плотность устройства возвращается как ноль с некоторых устройств

Плотность устройства возвращает 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.

Пожалуйста, совет.

4b9b3361

Ответ 1

Не так много можно сделать, кроме как справиться с этим изящно. Если плотность равна нулю или 0 проверяет ее и использует значение по умолчанию в этом случае.

Ответ 2

Хорошим способом получения DPI является создание файла string.xml для каждой плотности.

Создайте папки с именем values-mdpi, values-hdpi, values-xhdpi... и добавьте strings.xml во всех, со строкой с плотностью со значением плотности (mdpi для strings.xml, расположенной в значениях - mdpi и т.д.)

тогда чтение R.string.density даст вам правильную плотность

Ответ 3

Этот способ работает для меня в 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;
}

Ответ 4

Попробуйте следующее: у него есть некоторые проблемы с устройством, чем уровень API 4

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