Display.getSupportedModes()仅在4K Android TV上返回1080p显示模式

时间:2018-06-19 05:44:19

标签: android android-tv

最近我的应用为Android TV用户添加了对4K的支持。我的测试设备是SONY KD-49XF9005。虽然内置的图像查看器以及YouTube可以毫无问题地以4K显示,但到目前为止,我还没有运气让我的应用程序正常工作。

我的应用使用GLSurfaceView渲染图像。我跟着the 4K Display Mode API guide,我希望能够选择我的电视上可用的4K显示模式之一,以便我的GLSurfaceView能够以物理分辨率绘制(下面显示的代码片段)。然而,API不断地返回一个且仅一个显示模式,即1080p。这真让我烦恼,硬件应该支持它,因为其他内置应用程序可以使用4K,为什么它不会为我的应用程序返回4K显示模式?

我还阅读了所有相关的Android TV开发者指南,但无法找到任何特别的内容。我真的很感激,如果有人能够对我有所了解。谢谢!

public static void select4kDisplayMode(Context context, Window window) {
    if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {
        return;
    }

    WindowManager windowManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
    Display display = windowManager.getDefaultDisplay();
    Display.Mode[] modes = display.getSupportedModes();
    if (modes == null) {
        return;
    }

    Display.Mode selected = null;
    long max = 0;
    for (Display.Mode mode : modes) {
        FL.d(TAG, "available display mode: Mode %d: %dx%d/%.1ffps", mode.getModeId(),
                mode.getPhysicalWidth(), mode.getPhysicalHeight(),
                mode.getRefreshRate());
        long val = mode.getPhysicalWidth() * mode.getPhysicalHeight();
        if (val > max) {
            max = val;
            selected = mode;
        }
    }
    if (selected != null) {
        WindowManager.LayoutParams params = window.getAttributes();
        params.preferredDisplayModeId = selected.getModeId();
        window.setAttributes(params);

        FL.d(TAG, "selected display mode: Mode %d: %dx%d/%.1ffps", selected.getModeId(),
                selected.getPhysicalWidth(), selected.getPhysicalHeight(),
                selected.getRefreshRate());
    }
}

1 个答案:

答案 0 :(得分:0)

我是中国的编码人员,我发现Android TV仅支持Android App的1080p分辨率。 令我感到困惑的是,我打印了电视的参数,您可以看到文档,它表明您可以使用Android 6.0中的API渲染4K视频,但本机应用仅支持电视中的1080p。 此处:android 6.0 how supports 4K