如何调用SurfaceControl.setDesiredDisplayConfigSpecs修改屏幕刷新率,在android studio中写一个设置屏幕刷新率的demo,调用setDesiredDisplayConfigSpecs方法时该方法被hide,无法调用,如何解决和调用该方法呢
DisplayManager dm = (DisplayManager) getSystemService(Context.DISPLAY_SERVICE);
Display display = dm.getDisplay(Display.DEFAULT_DISPLAY);
Display.Mode[] modes = display.getSupportedModes();
Display.Mode selectedMode = null;
for (Display.Mode mode : modes) {
if (mode.getRefreshRate() == 120f) { // 设置 120Hz 刷新率
selectedMode = mode;
break;
}
}
SurfaceControl.Transaction t = new SurfaceControl.Transaction();
t.setDesiredDisplayModeSpecs(display, selectedMode);
setDesiredDisplayConfigSpecs()
方法是在Android 11中引入的,它用于设置显示器的高级配置,例如刷新率、分辨率等。调用该方法需要使用SurfaceControl
类。
在调用setDesiredDisplayConfigSpecs()
方法之前,您需要确保您的应用程序已经获得了对该权限的授予权限(android.permission.WRITE_SETTINGS)。
如果您正在使用API Level 30或更高版本,则可以通过以下方式调用该方法:
DisplayManager dm = (DisplayManager) getSystemService(Context.DISPLAY_SERVICE);
Display display = dm.getDisplay(Display.DEFAULT_DISPLAY);
Display.Mode[] modes = display.getSupportedModes();
Display.Mode selectedMode = null;
for (Display.Mode mode : modes) {
if (mode.getRefreshRate() == 120f) { // 设置 120Hz 刷新率
selectedMode = mode;
break;
}
}
SurfaceControl.Transaction t = new SurfaceControl.Transaction();
t.setDesiredDisplayConfigSpecs(display, Collections.singletonList(new DisplayConfig.Builder(selectedMode).build()));
t.apply();
但是,需要注意的是,该方法是hide的,这意味着它不建议在生产环境中使用,因为它未经过完整的测试。如果您想要使用该方法,可以考虑使用反射来调用该方法,但这并不推荐。
另外,需要注意的是,由于setDesiredDisplayConfigSpecs()
方法是hide的,因此在未来的版本中可能会被移除或更改其行为,因此建议您谨慎使用该方法。