Приложение xamarin ios, над которым я работаю, требует, чтобы GPS всегда был включен. Когда приложение устанавливается впервые, пользователь получает запрос на включение GPS, однако у него есть возможность отключить службы определения местоположения на уровне устройства.
Я бы хотел, чтобы мое приложение предложило пользователю (т.е. NAG) включить gps. Следовательно, я создал новый viewcontroller и соответствующий файл xib. XIB-файл выглядит так
Я добавил следующий код в WillEnterForeground, и нет ошибок, однако представление отображается, но если gps включен, это представление отображается не ранее активным представлением.
public override void WillEnterForeground(UIApplication application)
{
Console.WriteLine("App will enter foreground");
if (CLLocationManager.Status == CLAuthorizationStatus.Denied
|| CLLocationManager.Status == CLAuthorizationStatus.Restricted
|| CLLocationManager.Status == CLAuthorizationStatus.NotDetermined)
{
window = new UIWindow(UIScreen.MainScreen.Bounds);
var rootNavigationController = new UINavigationController();
rootNavigationController.PushViewController(new LocationServicesVerifyViewController(), false);
window.RootViewController = rootNavigationController;
window.MakeKeyAndVisible();
}
}
Идея заключается в том, что я представлю это представление при запуске приложения или при возврате из фона, если службы определения местоположения не включены.
При нажатии кнопки «Включить GPS» будет запущен следующий код, который в основном приведет пользователя к разделу местоположения на устройстве.
if (UIDevice.CurrentDevice.CheckSystemVersion(8, 0))
{
NSString settingsString = UIApplication.OpenSettingsUrlString;
NSUrl url = new NSUrl(settingsString);
UIApplication.SharedApplication.OpenUrl(url);
}
Мои объявления уровня класса
// class-level declarations
UIWindow window;
Мой текущий законченный метод запуска выглядит следующим образом
public override bool FinishedLaunching(UIApplication app, NSDictionary options)
{
AppDelegate.Self = this;
window = new UIWindow(UIScreen.MainScreen.Bounds);
var rootNavigationController = new UINavigationController();
window.RootViewController = rootNavigationController;
DataAccess.CheckDatabase();
if (DataAccess.GetLicence().APIKey == "")
{
rootNavigationController.PushViewController(new LicenceActivationViewController(), false);
}
else
{
rootNavigationController.PushViewController(new JobListViewController(), false);
}
window.MakeKeyAndVisible();
return true;
}