2

我正在尝试更改 Android 8.1 上主显示器的显示分辨率。我从内核(基于 EDID)收到一个事件,告诉我需要更改模式。

然后我基本上做:

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

这会正确更新 surfaceflinger、显示 hal 和内核,但 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?

我会以错误的方式解决这个问题吗?是否有适当的方法可以更改主显示器的分辨率/模式,但我还没有找到?

4

0 回答 0