从Application.Context – MonoAndroid获取当前活动

我目前正在开发一个使用Xamarin.Forms的应用程序,将在Android和iOS平台上提供。 当应用程序首次加载到设备上时,我检查设备上是否有可用的Internet连接。 如果Internet连接不可用,我想显示一个对话框。

下面是我使用Xamarin.Forms.ContentPage检查互联网的代码片段

 if(App.Connectivity.IsNetworkConnectivityAvailable()) { App.Notification.DisplayLocalNotifications("No Internet", "You need an internet connection to access certain application content"); } 

我正在使用dependency injection来构build适当的模块来处理每个适当的环境的对话框。 Android正在抛出以下exception

Android.Views.WindowManagerBadTokenException:无法添加窗口 – 标记null不适用于应用程序以下是Android上DisplayLocalNotification方法的代码:

 public void DisplayLocalNotification(string title, string content) { AlertDialog.Builder builder = new AlertDialog.Builder(Application.Context) .SetTitle(title) .SetMessage(content) .SetCancelable(true) .SetPositiveButton("OK", (EventHandler<DialogClickEventArgs>) null); AlertDialog alert = builder.Create(); alert.Show(); var okBtn = alert.GetButton((int)DialogButtonType.Positive); okBtn.Click += (sender, args) => { alert.Dismiss(); }; } 

在做了一些研究之后,我需要将当前活动传递给AlertDialog.Builder构造函数而不是Application.Context 。 当需要在活动上下文以外的活动时,如何从应用程序上下文获取当前活动对象?

Solutions Collecting From Web of "从Application.Context – MonoAndroid获取当前活动"

Xamarin.Forms Android平台代码应该将当前Activity分配给Forms.Context属性。 这是静态的Forms类,如果你debugging它,你会看到Forms.Context是一个Activity。

 public static class Forms { public static Context Context { get; } public static bool IsInitialized { get; } public static event EventHandler<ViewInitializedEventArgs> ViewInitialized; public static void Init(Activity activity, Bundle bundle); }