Display.HdrCapabilities和configuration.isScreenHdr之间的区别是什么?

3

我想了解Android上的HDR功能,因此我编写了以下代码来检查此功能。

        Display display = getWindowManager().getDefaultDisplay();
        Display.HdrCapabilities hdrCapabilities = display.getHdrCapabilities();
        int[] types = hdrCapabilities.getSupportedHdrTypes();
        for (int i=0; i<types.length; i++) {
            Log.d(TAG, "Support HDR TYPE " + types[i]);
        }
        float maxAverage = hdrCapabilities.getDesiredMaxAverageLuminance();
        float maxLum = hdrCapabilities.getDesiredMaxLuminance();
        float minLum = hdrCapabilities.getDesiredMinLuminance();
        Log.d(TAG, "Max Average " + maxAverage + " maxLum " + maxLum + " minLum " + minLum);

        Configuration configuration = new Configuration();
        boolean isWideColor = configuration.isScreenWideColorGamut();
        boolean isHDR = configuration.isScreenHdr();
        Log.d(TAG,"Configuration wide color " + isWideColor + " hdr " + isHDR);

在我的Pixel2手机上,结果是

Support HDR TYPE 2 //HDR_TYPE_HDR10
Support HDR TYPE 3 //HDR_TYPE_HLG
Max Average 500.0 maxLum 500.0 minLum 0.0
Configuration wide color false hdr false

我对此感到困惑,我知道Pixel2实际上可以播放HDR10内容,但为什么配置中说它不支持HDR和广色域。

reference: https://source.android.com/devices/tech/display/hdr

https://source.android.com/compatibility/android-cdd

1个回答

0
你构建了一个无效的配置:Configuration();并将其传递给了Configuration对象。为了解决这个问题,请替换为:

Configuration configuration = new Configuration();

使用:

Configuration configuration = getResources().getConfiguration();

在检查HDR和广色域支持时,您需要使用设备的配置而不是空构造函数。因此,使用后者的代码是有意义的。
参考:https://developer.android.com/reference/android/content/res/Configuration

该类描述了可以影响应用程序检索的资源的所有设备配置信息。这包括用户指定的配置选项(语言环境列表和缩放)以及设备配置(例如输入模式、屏幕大小和屏幕方向)。

您可以使用Resources从中获取此对象,使用Resources#getConfiguration。因此,从活动中,您可以通过链接请求ContextThemeWrapper.getResources()来获取它:


谢谢,你的代码是正确的。但是我用你的代码尝试了一下,结果还是一样。我得到的isScreenWideColorGamut和isScreenHdr都返回false。 - wchen61
这很奇怪。你能试试其他手机并报告结果吗? - prof.Zoom

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接