В настоящее время я разрабатываю приложение с использованием Xamarin.Forms
, которое будет доступно на платформах Android и iOS. Когда приложение впервые загружается на устройство, я проверяю, есть ли доступное интернет-соединение на устройстве. Я хочу отобразить диалоговое окно, если подключение к Интернету недоступно.
Вот следующий фрагмент кода, который я использую для проверки Интернета на Xamarin.Forms.ContentPage
if(App.Connectivity.IsNetworkConnectivityAvailable())
{
App.Notification.DisplayLocalNotifications("No Internet", "You need an internet connection to access certain application content");
}
Я использую внедрение зависимостей для создания соответствующего модуля для обработки диалоговых окон для каждой соответствующей среды. Android выдает следующее исключение
Android.Views.WindowManagerBadTokenException: невозможно добавить окно — токен null не для приложения. Вот код метода DisplayLocalNotification на 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();
};
}
После некоторых исследований мне нужно передать текущую активность конструктору AlertDialog.Builder
вместо Application.Context
. Как получить текущий объект действия из контекста приложения, когда вам нужно действие вне контекста действия?
this
? - person Squonk   schedule 02.09.2014AndroidActivity
. Он содержится в классе, который не знает текущий объект активности, но может получить доступ к объектуApplication.Context
. - person Michael Kniskern   schedule 02.09.2014Activity
, вы не можете гарантировать, что он существует. Что-то должно быть активным/видимым, чтобы создатьAlertDialog
, и в этом случае вы должны использовать этотActivity
Context
.Application
в терминах Android не имеет видимости и представляет собой скелетную структуру. - person Squonk   schedule 02.09.2014