Forms.Context 已过时,那么我应该如何获取单个活动应用程序的活动?

Inf*_*eus 2 android android-activity xamarin

现在我用这个:

var activity = (Activity)Forms.Context;
Run Code Online (Sandbox Code Playgroud)

但我应该用什么来代替呢?

根据此处接受的答案,我应该使用Android.App.Application.ContextXamarin.Forms: Forms.Context is obsolete

但我无法将其投射到Activity.

这里有什么解决方法吗?

UPD:我需要它来关闭库中的应用程序。

Vah*_*hir 5

解决方案一: 使用CurrentActivityPlugin库。正确设置后:

var activity = CrossCurrentActivity.Current.Activity;
Run Code Online (Sandbox Code Playgroud)

解决方案二: 在MainActivity类中定义一个静态实例:

public class MainActivity : FormsAppCompatActivity
{
    public static FormsAppCompatActivity Instance { get; private set; }

    protected override void OnCreate(Bundle bundle)
    {
        Instance = this;

        //other codes
    }
}
Run Code Online (Sandbox Code Playgroud)

并像这样使用它:

var activity = MainActivity.Instance;
Run Code Online (Sandbox Code Playgroud)

注意:显然,当应用程序的入口点是 MainActivity 时,我们应该使用解决方案二,而不是其他入口点,例如后台服务、广播接收器等,否则 MainActivity.Instance 可能为 null。对于这些情况,我们可以使用解决方案一,或者也在这些入口点中定义一个静态实例。