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

更新:自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的情况下给出错误的结果.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值