Мне нужно определить плотность экрана во время выполнения в Android AppWidget. Я установил устройство эмулятора HDPI (avd). Если настроить обычный исполняемый проект и вставить этот код в метод onCreate:
DisplayMetrics dm = getResources().getDisplayMetrics();
Log.d("MyTag", "screen density " + dm.densityDpi);
Выводит «плотность экрана 240», как и ожидалось.
Однако, если я настрою проект AppWidget и вставлю этот код в метод onUpdate:
DisplayMetrics dm = context.getResources().getDisplayMetrics();
Log.d("MyTag", "screen density " + dm.densityDpi);
Выводит «плотность экрана 160». Я заметил, подключив отладчик, что член mDefaultDisplay объекта Resources здесь равен нулю в случае AppWidget.
Точно так же, если я получаю ресурс во время выполнения, используя объект Resources, полученный из context.getResources () в AppWidget, он возвращает неправильный ресурс в зависимости от плотности экрана. Например, у меня есть отрисовка 60x60px для mdpi и 80x80 для hdpi. Если я получаю этот объект Drawable с помощью context.getResources (). GetDrawable (...), он возвращает версию 60x60.
Есть ли способ правильно обращаться с ресурсами во время выполнения из контекста AppWidget?
Спасибо!