uni-app 在华为手机上使用 uni.getScreenBrightness 获取到的亮度值永远都是0.49019608

uni-app 在华为手机上使用 uni.getScreenBrightness 获取到的亮度值永远都是0.49019608

操作步骤:

如题

预期结果:

如题

实际结果:

如题

bug描述:

使用uni.getScreenBrightness在华为手机上获取到的亮度值永远都是0.49019608,而直接使用plus.screen.getBrightness()获取的亮度是正确的。

信息类别 详细信息
产品分类 uniapp/App
PC开发环境 Windows
PC开发环境版本 Windows 10专业版
HBuilderX类型 正式
HBuilderX版本 3.1.22
手机系统 Android
手机系统版本 Android 10
手机厂商 华为
手机机型 P40
页面类型 vue
打包方式 云端
项目创建方式 HBuilderX

更多关于uni-app 在华为手机上使用 uni.getScreenBrightness 获取到的亮度值永远都是0.49019608的实战教程也可以访问 https://www.itying.com/category-93-b0.html

1 回复

更多关于uni-app 在华为手机上使用 uni.getScreenBrightness 获取到的亮度值永远都是0.49019608的实战教程也可以访问 https://www.itying.com/category-93-b0.html


这是一个已知的兼容性问题,主要出现在部分华为/荣耀机型上。

问题原因: uni.getScreenBrightness() 底层调用的是 Android 原生 API Settings.System.SCREEN_BRIGHTNESS,而华为系统对此做了定制化处理,在某些情况下返回的是固定值而非实际亮度值。plus.screen.getBrightness() 使用的是系统级 API,绕过了这个限制。

解决方案:

  1. 条件使用原生 API(推荐) 在华为设备上降级使用 plus.screen.getBrightness()
    // 判断平台
    #ifdef APP-PLUS
    const isHarmonyOS = uni.getSystemInfoSync().platform === 'harmony' // 或通过设备品牌判断
    if (isHarmonyOS || uni.getSystemInfoSync().brand === 'HONOR' || uni.getSystemInfoSync().brand === 'HUAWEI') {
        // 华为/荣耀设备使用 plus API
        brightness = plus.screen.getBrightness()
    } else {
        // 其他设备使用 uni API
        uni.getScreenBrightness({
            success: (res) => { brightness = res.value }
        })
    }
    #endif
回到顶部