You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 01:54:01