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

.Net MAUI中如何获取Android当前Activity(替代Xamarin.Essentials方案)

官方等效API说明
  • 若你迁移的目标是完整.NET MAUI项目,官方直接提供了和Xamarin.Essentials.Platform.CurrentActivity完全等效的API,无需额外引入Xamarin.Essentials包,直接使用Microsoft.Maui.ApplicationModel.Platform.CurrentActivity即可,调用逻辑和原API完全一致,替换命名空间就能用。
  • 若你做的是不引入MAUI工作负载的纯.NET 6 Android单平台项目,不需要复制Xamarin.Essentials源码,可直接基于Android原生提供的生命周期回调实现同等能力,该方案无额外依赖,适配性更强。
纯.NET 6 Android项目无依赖实现方案

该方案和Xamarin.Essentials内部的CurrentActivity实现逻辑完全一致,仅依赖.NET 6 Android项目默认内置的基础库,不会产生依赖冲突:

  1. 定义全局静态Activity持有类,实现Android原生的IActivityLifecycleCallbacks接口追踪当前活跃的Activity:
using Android.App;
using Android.OS;
using Android.Runtime;

public static class CurrentActivityProvider
{
    public static Activity? CurrentActivity { get; private set; }

    public static void Register(Application app)
    {
        app.RegisterActivityLifecycleCallbacks(new LifecycleCallback());
    }

    private class LifecycleCallback : Java.Lang.Object, Application.IActivityLifecycleCallbacks
    {
        public void OnActivityCreated(Activity activity, Bundle? savedInstanceState)
        {
            CurrentActivity = activity;
        }

        public void OnActivityResumed(Activity activity)
        {
            CurrentActivity = activity;
        }

        public void OnActivityDestroyed(Activity activity)
        {
            if (CurrentActivity == activity)
                CurrentActivity = null;
        }

        // 其余生命周期方法不需要处理,留空即可
        public void OnActivityStarted(Activity activity) {}
        public void OnActivityPaused(Activity activity) {}
        public void OnActivityStopped(Activity activity) {}
        public void OnActivitySaveInstanceState(Activity activity, Bundle outState) {}
    }
}
  1. 在项目自定义Application类的OnCreate方法中执行初始化,确保应用启动时就注册生命周期监听:
[Application]
public class MainApplication : Application
{
    public MainApplication(IntPtr handle, JniHandleOwnership transfer) : base(handle, transfer)
    {
    }

    public override void OnCreate()
    {
        base.OnCreate();
        CurrentActivityProvider.Register(this);
    }
}

完成后全局直接调用CurrentActivityProvider.CurrentActivity就能拿到当前前台Activity,和原Xamarin.Essentials的API使用体验完全一致。

注意:不要在Activity的OnDestroy触发后仍持有该Activity的引用,上述代码已经在对应生命周期做了置空处理,避免内存泄漏。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 04:42:09