Я пытаюсь изменить разрешение экрана моего основного дисплея на 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, который я пропустил, что я могу использовать?
Я поступаю неправильно? Есть ли подходящий способ изменить разрешение / режим основного дисплея, которого я не нашел?