我正在为我的应用程序使用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实现了。因此,请任何人帮助我解决此问题。
答案 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");
}
}