Как мне обработать отказ в разрешении на устройствах xamarin forms iOS

#c# #ios #xamarin

#c# #iOS #xamarin

Вопрос:

Я сталкиваюсь с сообщением об исключении xamarin.essentials.permission =locationwheninuse разрешение не было предоставлено: отказано», и я понятия не имею, как с этим справиться.

Я использую xam.plugin.geolocator, и вот мой список

 <key>UIBackgroundModes</key>
  <array>
    <string>location</string>
  </array>
  <key>UILaunchStoryboardName</key>
  <string>LaunchScreen</string>
  <key>NSLocationWhenInUseUsageDescription</key>
  <string>This app needs access to location when open.</string>
  <key>NSLocationAlwaysUsageDescription</key>
  <string>This app needs access to location when in the background.</string>
  <key>NSLocationAlwaysAndWhenInUseUsageDescription</key>
  <string>This app needs access to location when open and in the background.</string>
  <key>UIBackgroundModes</key>
  <array>
    <string>location</string>
  </array>
  

пока здесь находится мой appdelegate

 public partial class AppDelegate : global::Xamarin.Forms.Platform.iOS.FormsApplicationDelegate
    {
        //
        // This method is invoked when the application has loaded and is ready to run. In this 
        // method you should instantiate the window, load the UI into it and then make the window
        // visible.
        //
        // You have 17 seconds to return from this method, or iOS will terminate your application.
        //
        public override bool FinishedLaunching(UIApplication app, NSDictionary options)
        {
            Rg.Plugins.Popup.Popup.Init();

            global::Xamarin.Forms.Forms.Init();

            Syncfusion.Licensing.SyncfusionLicenseProvider.RegisterLicense(AppSetting.SyncfusionLicense);
            Syncfusion.XForms.iOS.TextInputLayout.SfTextInputLayoutRenderer.Init();
            SfCalendarRenderer.Init();
            new SfCarouselRenderer();
            Xamarin.FormsMaps.Init();
            ZXing.Net.Mobile.Forms.iOS.Platform.Init();

            LoadApplication(new App(new iOSInitializer()));

            UITabBar.Appearance.SelectedImageTintColor = UIColor.Black;
            UITabBar.Appearance.TintColor = UIColor.Gray;
            UITabBar.Appearance.BarTintColor = UIColor.White;

            return base.FinishedLaunching(app, options);
        }
    }
  

для репликации я просто развернул приложение на устройстве. После открытия он запросит у вас разрешение. Нажмите «Не разрешать».

Есть идеи?

TIA.

Комментарии:

1. В вашем вопросе НЕ показан код разрешения, но вам нужно сначала проверить разрешения, прежде чем запрашивать их, чтобы вы могли пропустить запрос (и, следовательно, PermissionException ), если пользователь уже отказал в них: learn.microsoft.com/en-us/xamarin/essentials / …

2. Я пытался использовать это в моей mainpage viewmodel, в моем коде mainpage и на других страницах, а также в app.cs. Но я не знаю, где еще это разместить.

3. Почему бы вам просто не проверить статус разрешений и не показать им диалоговое окно, в котором говорится, что они не могут войти в приложение, если они уже не приняли все разрешения? learn.microsoft.com/en-us/xamarin/essentials/… А затем запросить разрешение или отменить вход?

4. Привет, Saamer, я тоже это сделал. Оно запускается при первом запуске после его установки на устройстве.

5. @JohnMombay Привет, ты имеешь в виду, что в диалоговом окне разрешения всегда отображается «не разрешить»?