如何在运行时请求iOS权限(相机和位置)?

时间:2019-03-26 11:56:40

标签: c# ios unity3d

我正在Unity中制作一个应用程序,该应用程序使用手机的摄像头和用户的位置。在他们阅读了为什么要他们授予权限之后,我希望这些权限弹出窗口显示给用户。因此,在应用程序中按“接受”按钮应检查该应用程序是否具有一定的权限,如果没有,请:询问该权限。 简而言之,我需要的是: -一种检查应用程序是否具有特定权限的方法 -一种触发权限弹出窗口的方法 -(很高兴:)一种检查弹出窗口中是否已授予权限的方法

我已经为Android完全构建了它,因为android提供了这样做的方法。 谷歌搜索后,我发现iOS将在应用启动需要未授权权限的某些服务时提示权限弹出窗口。这意味着我可以简单地启动定位服务或摄像头来检查应用程序是否具有这些权限。不过,我认为这是一个肮脏的解决方法,因为它要求应用程序启动当时不需要的服务。

1 个答案:

答案 0 :(得分:0)

欢迎使用StackOverflow!

您可以使用以下库:https://github.com/jamesmontemagno/PermissionsPlugin

如果要检索位置许可,可以使用以下代码:

try
{
    var status = await CrossPermissions.Current.CheckPermissionStatusAsync(Permission.Location);
    if (status != PermissionStatus.Granted)
    {
        if(await CrossPermissions.Current.ShouldShowRequestPermissionRationaleAsync(Permission.Location))
        {
            await DisplayAlert("Need location", "Gunna need that location", "OK");
        }

        var results = await CrossPermissions.Current.RequestPermissionsAsync(Permission.Location);
        //Best practice to always check that the key exists
        if(results.ContainsKey(Permission.Location))
            status = results[Permission.Location];
    }

    if (status == PermissionStatus.Granted)
    {
        var results = await CrossGeolocator.Current.GetPositionAsync(10000);
        LabelGeolocation.Text = "Lat: " + results.Latitude + " Long: " + results.Longitude;
    }
    else if(status != PermissionStatus.Unknown)
    {
        await DisplayAlert("Location Denied", "Can not continue, try again.", "OK");
    }
}
catch (Exception ex)
{

    LabelGeolocation.Text = "Error: " + ex;
}