как проверить, имеет ли мое приложение разрешение всегда или при использовании в ios с помощью xamarin.forms

#xamarin.forms

#xamarin.forms

Вопрос:

Я использую xamarin.forms для своего приложения, и я использую устройство ios. Я хочу проверить, использует ли мое приложение «Всегда» или «При использовании приложения» для определения местоположения в iOS.

 var LocationStatus1 = await CrossPermissions.Current.CheckPermissionStatusAsync(Permission.LocationAlways);
                if (LocationStatus1 == PermissionStatus.Granted)
                {
                    LocationLabel.Text = "Location Always";
                }
                var LocationStatus2 = await CrossPermissions.Current.CheckPermissionStatusAsync(Permission.LocationWhenInUse);
                if (LocationStatus2 == PermissionStatus.Granted)
                {
                    LocationLabel.Text = "Location When In Use";
                }
  

Я ожидаю, что когда у моего приложения есть разрешение типа «Всегда», тогда выполняется LocationStatus1 или «При использовании приложения» означает, что выполняется LocationStatus2. Но теперь LocationStatus1 и LocationStatus2 выполняются. Итак, кто-нибудь, пожалуйста, помогите мне решить эту проблему.

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

1. Вам нужно будет взглянуть на реализацию перекрестных разрешений. Текущий. Проверьте permissionstatusasync или прочитайте его документ, если это сторонняя библиотека.

Ответ №1:

Причина:

CrossPermissions не может определить разницу между Always и WhenInUse, потому что это только в iOS.

Решение:

Вы можете реализовать его на собственной платформе iOS и получить его с помощью DependencyService.

Обратитесь к следующему коду

в формах

Определите интерфейс

 namespace xxx
{
  public interface ICheckLocationStatus
  {
    int CheckLocationStatus();
  }
}
  

в проекте iOS

 using xxx;
using xxx.iOS;

using Xamarin.Forms;
using Xamarin.Forms.Platform.iOS;

using CoreLocation;
[assembly: Dependency(typeof(GetLocationStatus))]
namespace xxx.iOS
{
    public class GetLocationStatus : ICheckLocationStatus
    {
        public int CheckLocationStatus()
        {

            var status = CLLocationManager.Status;

            if(status== CLAuthorizationStatus.AuthorizedAlways)
            {
                return 0;
            }

            else if (status == CLAuthorizationStatus.AuthorizedWhenInUse)
            {
                return 1;
            }

            else if (status == CLAuthorizationStatus.Denied)
            {
                return 2;
            }

            else 
            {
                return 3;
            }

        }
    }
}
  

И вызовите метод в формах (например, при нажатии кнопки)

 private void Button_Clicked(object sender, EventArgs e)
 {
    int status = DependencyService.Get<ICheckLocationStatus>().CheckLocationStatus();

    if (status == 0)
    {
       DisplayAlert("Title", "Location Always", "Cancel");
    }

    else if (status == 1)
    {
       DisplayAlert("Title", "Location WhenInUse", "Cancel");
    }

    else if (status == 2)
    {
       DisplayAlert("Title", "Location Denied", "Cancel");
    }

    else
    {
       DisplayAlert("Title", "Location Unknown", "Cancel");
    }

}