Android R版本以下getDefaultDisplay()废弃后的替代方案是什么
问题描述
开发过程中遇到getDefaultDisplay()已废弃的警告,官方要求使用Context.getDisplay(),但该方法仅支持Android R及以上版本,R版本以下的系统需要使用什么替代方案?
现有实现代码如下:
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.R) { display = mContext.getDisplay(); } else { ((Activity) mContext).getWindowManager().getDefaultDisplay(); //Deprecated }
解决方案
你的现有分支逻辑本身可正常运行:getDefaultDisplay() 仅在API 30及以上版本标记废弃,在API 29及更低版本系统中功能完全正常,不会触发运行时异常,仅会存在编译警告。如果需要完全消除废弃提示、同时适配非Activity上下文场景,可以使用DisplayManager作为低版本替代方案,该类从API 17开始提供,覆盖绝大多数主流活跃设备的系统版本。
优化后代码实现
Display display = null; if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { display = mContext.getDisplay(); } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) { DisplayManager displayManager = (DisplayManager) mContext.getSystemService(Context.DISPLAY_SERVICE); // 获取默认显示屏幕,与原getDefaultDisplay()返回结果一致 display = displayManager.getDisplay(Display.DEFAULT_DISPLAY); } else { // 仅API 16及以下极老旧设备需要走原有逻辑 display = ((Activity) mContext).getWindowManager().getDefaultDisplay(); }
注意事项
- 若应用最低支持版本≥API 17,可直接删除最后一个else分支的废弃代码,彻底消除编译警告
- 若使用的上下文为非Activity类型(如Application上下文),优先选择DisplayManager方案,可避免Activity类型转换异常
- 若你的需求是获取屏幕尺寸、分辨率等窗口相关参数,Android 12及以上更推荐使用
WindowMetrics相关API,对多窗口、折叠屏等场景适配更友好
内容的提问来源于stack exchange,提问作者Vijayadhas Chandrasekaran
相关产品推荐
相关产品推荐

