gpt4 book ai didi

android - 从 Application.Context 获取当前 Activity - MonoAndroid

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:20:01 26 4
gpt4 key购买 nike

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

这是我用来在 Xamarin.Forms.ContentPage

上检查互联网的以下代码 fragment
if(App.Connectivity.IsNetworkConnectivityAvailable())
{
App.Notification.DisplayLocalNotifications("No Internet", "You need an internet connection to access certain application content");
}

我正在使用依赖项注入(inject)构建适当的模块来处理每个适当环境的对话框。 Android 抛出以下异常

Android.Views.WindowManagerBadTokenException: Unable to add window -- token null is not for an application Here is the code for the DisplayLocalNotification method on the Android:

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();
};
}

经过一些研究,我需要将当前 Activity 传递给 AlertDialog.Builder 构造函数而不是 Application.Context。当您需要 Activity 上下文之外的 Activity 时,如何从应用程序上下文中获取当前 Activity 对象?

最佳答案

Xamarin.Forms Android 平台代码应将当前 Activity 分配给 Forms.Context 属性。这是静态 Forms 类,如果对其进行调试,您将看到 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);
}

关于android - 从 Application.Context 获取当前 Activity - MonoAndroid,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25613225/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com