Intereting Posts
«Отсутствует атрибут contentDescription на изображении» в XML Как установить часть текстового вида можно щелкнуть Нет идентификатора для моего Android UI Testing Кнопка блокировки в Android Конфигурации Gradle не работают, как ожидается в новой системе Android Android Студия Android: эмулятор работает, но не отображается в Run App «выберите запущенное устройство» Сохранить и восстановить свернутое состояние ExpandableListActivity с помощью SimpleCursorTreeAdapter Как получить активность в Intent Service Секретный процесс сборки Android Может ли кто-нибудь предложить более быструю альтернативу этому алгоритму регулярного выражения? Преобразование YUV-данных камеры в ARGB с помощью renderscript Как создать титульную границу в Android? Два приложения с общим идентификатором пользователя Как установить ширину и высоту изображения, когда он установлен в drawableLeft Промо-видео не видно в Google Play, но работает в Android Play

Получить текущую активность из Application.Context – MonoAndroid

В настоящее время я разрабатываю приложение с использованием 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 . Как получить текущий объект активности из контекста приложения, когда вам нужно заниматься за пределами контекста активности?

Solutions Collecting From Web of "Получить текущую активность из Application.Context – MonoAndroid"

Xamarin.Forms Код платформы Android должен назначать текущую активность в свойстве 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); }