Программное изменение разрешения основного дисплея

Я пытаюсь изменить разрешение основного дисплея на Android 8.1. Я получаю событие от ядра (на основе EDID), которое сообщает мне, что мне нужно изменить режим.

Затем я в основном делаю:

sp<IBinder> display(SurfaceComposerClient::getBuiltInDisplay(ISurfaceComposer::eDisplayIdMain));
status_t res = SurfaceComposerClient::setActiveConfig(display, new_mode);

Это правильно обновляет Surfaceflinger, половину дисплея и ядро, но windowmanager /display не меняет разрешение, пока я не запустил:

wm size 1920x1080
wm density 240

Но wm вызывает эти функции, которые кажутся слишком резкими, а также сохраняет размер / плотность в постоянных настройках:

public void setForcedDisplaySize(int displayId, int width, int height);
public void setForcedDisplayDensityForUser(int displayId, int density, int userId);

Я смотрел код в windowmanager /display, но не нашел API, который я должен использовать для этого.

Есть ли способ уведомить windowmanager /display об изменении Surfaceflinger или пропущенном мной API, который я могу использовать?

Я ошибаюсь? Есть ли правильный способ изменить разрешение / режим основного дисплея, которого я не нашел?

0 ответов

Другие вопросы по тегам