# 问题描述
今天公司的写应用的同事找我帮忙实现一个在应用上修改dpi的接口,但是我印象里修改dpi一般是修改display_manager_config.xml文件里的值。要通过调用接口的方式来实现的话,应该要去修改系统源码了。下面我把修改的成果和大家分享一下。

# 解决方案:
1、添加系统属性
在base\startup\init\services\etc\param\ohos.para下面添加persist.ohos.dpi=240的系统属性

2、修改系统获取dpi的获取方式
通过阅读foundation\window\window_manager\dmserver\src\abstract_display.cpp这里的代码可以知道,原本系统获取dpi的方式是uint32_t densityDpi = static_cast<uint32_t>(numbersConfig["dpi"][0]);在这里来读取display_manager_config.xml文件里面的dpi的值,这里我们做一下修改,把系统获取dpi的方法改为获取我们系统属性persist.ohos.dpi的值,具体修改如下:

注:因为这里使用的OHOS::system::GetParameter接口所以要添加#include "parameters.h"头文件,不然会报错

3、应用层接口调用

```cpp
try {
    systemparameter.setSync("persist.ohos.dpi", "160");   //这里改成160来验证效果
} catch(e) {
    console.log("set unexpected error: " + e);
}

power.reboot('reboot_test')  //系统重启生效
```

Logo

社区规范:仅讨论OpenHarmony相关问题。

更多推荐