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和广色域。

参考: https ://source.android.com/devices/tech/display/hdr

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

4

1 回答 1

0

您构造了一个无效的配置:Configuration();并将其传递给 Configuration 对象。要解决它,请替换:

Configuration configuration = new Configuration();

和 :

Configuration configuration = getResources().getConfiguration();

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

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

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

于 2020-04-02T09:58:31.700 回答