Как запросить разрешения iOS (камера и местоположение) во время выполнения? - PullRequest
1 голос
/ 26 марта 2019

Я делаю приложение в Unity, которое использует камеру телефона и местоположение пользователя.Я хочу, чтобы эти разрешения отображались пользователю после того, как они прочитали, почему я хочу, чтобы они дали разрешение.Поэтому нажатие кнопки «Принять» в приложении должно проверить, есть ли у приложения определенное разрешение, а если нет: спросите это разрешение.Короче говоря, мне нужно: - способ проверить, имеет ли приложение определенное разрешение; - способ вызвать всплывающее окно разрешения;1001 *

Я уже построил именно это для Android, так как Android предоставляет способы сделать это.После поиска в Google я обнаружил, что iOS выдаст всплывающие окна с разрешениями, когда приложение запускает определенную службу, для которой требуется разрешение без разрешения.Это означает, что я мог бы просто запустить службу определения местоположения или камеру, чтобы проверить, есть ли у приложения эти разрешения.Я думаю, что это грязное исправление, поскольку оно требует, чтобы приложение запускало службы, которые не нужны в то время.

1 Ответ

0 голосов
/ 26 марта 2019

Добро пожаловать в 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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...