如何使用xamarin.forms检查我的应用是否始终获得许可或在ios中使用时

时间:2019-04-23 12:59:28

标签: 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会变为true,或者“使用应用程序时”则意味着LocationStatus2会变为true。但是现在LocationStatus1和LocationStatus2实现了。因此,请任何人帮助我解决此问题。

1 个答案:

答案 0 :(得分: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");
    }

}