Изменение основного разрешения экрана программно - PullRequest
1 голос
/ 11 февраля 2020

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

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

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

Это обновляет Surfaceflinger, Hal дисплея и ядро правильно, но менеджер окон / дисплей не изменяет разрешение до тех пор, пока я не запущу:

wm size 1920x1080
wm density 240

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

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, который я пропустил, что я могу использовать?

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

...