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

MAUI中MauiAppCompatActivity返回键处理:OnBackPressed已弃用

解决MAUI Android中OnBackPressed过时警告的三种方法

你已经按版本拆分了返回键逻辑,但重写OnBackPressed仍触发过时警告——原因是该方法在Android 33及以上版本已被标记为过时,但低版本仍需依赖它。以下是三种实用解决方案:

方法一:临时禁用特定警告

针对OnBackPressed方法单独禁用过时警告(CS0618),不影响其他代码的警告提示:

#pragma warning disable CS0618 // 临时禁用"过时成员"警告
public override void OnBackPressed()
{
    if (!OperatingSystem.IsAndroidVersionAtLeast(33))
    {
        if (!HandledBackPressed())
        {
            base.OnBackPressed();
        }
    }
}
#pragma warning restore CS0618 // 恢复警告检测

方法二:用平台特性明确版本适配

通过特性标记该方法仅适用于Android 33以下版本,让编译器自动忽略对应版本的警告:

[Obsolete("Android 33+请使用OnBackInvokedCallback处理返回键", false)]
[SupportedOSPlatform("android")]
[UnsupportedOSPlatform("android33.0")]
public override void OnBackPressed()
{
    if (!OperatingSystem.IsAndroidVersionAtLeast(33))
    {
        if (!HandledBackPressed())
        {
            base.OnBackPressed();
        }
    }
}

特性参数false表示仅显示警告而非报错,可根据需求调整为true强制报错。

方法三:条件编译隔离版本代码

从编译层面拆分不同版本的代码,让OnBackPressed仅在Android 33以下版本中编译,彻底避免警告:

// OnCreate中的注册代码也可同步优化
protected override async void OnCreate(Bundle? savedInstanceState)
{
    base.OnCreate(savedInstanceState);

#if ANDROID33_0_OR_GREATER
    OnBackInvokedDispatcher.RegisterOnBackInvokedCallback(0, this);
#endif
}

// 仅在Android 33以下版本编译这段代码
#if ANDROID && !ANDROID33_0_OR_GREATER
public override void OnBackPressed()
{
    if (!HandledBackPressed())
    {
        base.OnBackPressed();
    }
}
#endif

这种方式最干净,既消除了警告,又避免了冗余的运行时版本判断。

另外建议:确保你的HandledBackPressed()逻辑是通用的,在Android33+对应的OnBackInvoked回调中也调用它,保持返回键处理逻辑的一致性。

内容的提问来源于stack exchange,提问作者Luke Vo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 17:46:12