最近我的应用为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());
}
}
答案 0 :(得分:0)
我是中国的编码人员,我发现Android TV仅支持Android App的1080p分辨率。 令我感到困惑的是,我打印了电视的参数,您可以看到文档,它表明您可以使用Android 6.0中的API渲染4K视频,但本机应用仅支持电视中的1080p。 此处:android 6.0 how supports 4K