android 4k代码,在Android上检测4K UHD屏幕

博客介绍了在Android中检测4K设备的相关内容。自ExoPlayer 1.5.1起相关问题已修复,可靠检测4K设备的唯一方法是使用仅在api级别23中可用的Device.Mode。还给出了检测4K的代码示例,不过在api少于23的情况下可能给出错误结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

更新:自ExoPlayer 1.5.1起已修复(见

https://github.com/google/ExoPlayer/commit/79055066813123c939c29e5a5e223a5ff043b91e)

我跟进了ExoPlayer的开发人员并找到了答案:

可靠地检测4K设备的唯一方法是使用Device.Mode,它仅在api级别23中可用.请参阅此处的Android M说明:

这里的课程文档:

对于ExoPlayer,它不实现此代码,从当前版本(1.4.2)开始,但可能会改变.看到:

最后回答这个问题,现在检测4K的正确方法是这样的:

/**

* Used to check if the connected device support UHD (3840x2160)

*

* Note that this call will fail to identify UHD devices on api level bellow 23 (M)

*

* @return 1 if device is UHD, 0 otherwise

*/

public int isUHD(){

Display display = getActivity().getWindowManager().getDefaultDisplay();

Point displaySize = getDisplaySize(display);

return (displaySize.x >= 3840 && displaySize.y >= 2160) ? 1 : 0;

}

/**

* Convenience function that forks to the different ways to obatin the Display size across Android versions

*

* @param display Display instance to obtain information from

*

* @return Point a Point describing the Display size

*/

private static Point getDisplaySize(Display display) {

Point displaySize = new Point();

if(Util.SDK_INT >= 23){

getDisplaySizeV23(display, displaySize);

}else if(Util.SDK_INT >= 17) {

getDisplaySizeV17(display, displaySize);

} else if(Util.SDK_INT >= 16) {

getDisplaySizeV16(display, displaySize);

} else {

getDisplaySizeV9(display, displaySize);

}

return displaySize;

}

@TargetApi(23)

private static void getDisplaySizeV23(Display display, Point outSize){

Display.Mode[] modes = display.getSupportedModes();

if(modes.length > 0){

Display.Mode mode = modes[0];

outSize.x = mode.getPhysicalWidth();

outSize.y = mode.getPhysicalHeight();

}

}

@TargetApi(17)

private static void getDisplaySizeV17(Display display, Point outSize) {

display.getRealSize(outSize);

}

@TargetApi(16)

private static void getDisplaySizeV16(Display display, Point outSize) {

display.getSize(outSize);

}

private static void getDisplaySizeV9(Display display, Point outSize) {

outSize.x = display.getWidth();

outSize.y = display.getHeight();

}

哪个会在api少于23的情况下给出错误的结果.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值