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

bos*_*ere 5 android android-tv

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

我的应用程序使用 GLSurfaceView 来渲染图像。我遵循了 4K 显示模式 API 指南,希望能够选择电视上可用的 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());
    }
}
Run Code Online (Sandbox Code Playgroud)

小智 1

我是一名中国的程序员,我发现 Android TV 仅支持 Android 应用程序的 1080p 分辨率。这让我很困惑,我打印了电视的参数,你可以看到文档,它显示你可以使用Android 6.0中的API渲染4K视频,但本机应用程序仅支持电视中的1080p。这里:android 6.0如何支持4K