Как запросить разрешения в Xamarin. Android? - PullRequest
0 голосов
/ 17 марта 2020

Я искал весь стекопоток и форум Xamarin, но весь код, который я нашел, никогда не работал. Большинство ключевых слов дают ошибку: «x не существует в текущем контексте», и я не могу найти пространство имен или библиотеку, которая их содержит. Я новичок в Xamarin, так что извините, если это глупый вопрос. Пример кода, который я пробовал

Ответы [ 2 ]

0 голосов
/ 17 марта 2020

ПРИМЕЧАНИЕ

Вам не нужно добавлять дополнительные плагины, если вы следуете этому, ниже приведен пример, показывающий, как вы обрабатываете разрешение на местоположение

В проверке метода OnCreate для существующих разрешений:

 if (!(CheckPermissionGranted(Manifest.Permission.AccessCoarseLocation) &&
            CheckPermissionGranted(Manifest.Permission.AccessFineLocation)))
        {
            RequestLocationPermission();
        }
        else
        {
            InitializeLocationManager();
        }
        InitPageWidgets();

Где Проверка разрешения Предоставлено - это метод, подобный следующему:

 [Export]
    public bool CheckPermissionGranted(string Permissions)
    {
        // Check if the permission is already available.
        if (ActivityCompat.CheckSelfPermission(this, Permissions) != Permission.Granted)
        {
            return false;
        }
        else
        {
            return true;
        }


    }

А код разрешения запроса выглядит примерно так:

  private void RequestLocationPermission()
    {
        if (ActivityCompat.ShouldShowRequestPermissionRationale(this, Manifest.Permission.AccessFineLocation))
        {
            // Provide an additional rationale to the user if the permission was not granted
            // and the user would benefit from additional context for the use of the permission.
            // For example if the user has previously denied the permission.
            ActivityCompat.RequestPermissions(this, PermissionsLocation, REQUEST_LOCATION);

        }
        else
        {
            // Camera permission has not been granted yet. Request it directly.
            ActivityCompat.RequestPermissions(this, PermissionsLocation, REQUEST_LOCATION);
        }
    }

Как только вы примете или отклоните это разрешение, будет вызван этот метод:

public override void OnRequestPermissionsResult(int requestCode, string[] permissions,
                     Android.Content.PM.Permission[] grantResults)
    {
        Log.Info(Tag, "onRequestPermissionResult");
        if (requestCode == RequestPermissionsRequestCode)
        {
            if (grantResults.Length <= 0)
            {
                // If user interaction was interrupted, the permission request is cancelled and you
                // receive empty arrays.
                Log.Info(Tag, "User interaction was cancelled.");
            }
            else if (grantResults[0] == PermissionChecker.PermissionGranted)
            {
                // Permission was granted.
                Service.RequestLocationUpdates();
            }
            else
            {
                // Permission denied.
                SetButtonsState(false);
                Toast.MakeText(this, "Permission Denied", ToastLength.Long).Show();
            }
        }
    }
0 голосов
/ 17 марта 2020

Вы можете удалить папку bin и obj в проекте, а затем пересобрать и перестроить ее.

Для запроса разрешения вы можете установить плагин Plugin.Permissions из nuget.

Использование

try
{
    var status = await CrossPermissions.Current.CheckPermissionStatusAsync<LocationPermission>();
    if (status != PermissionStatus.Granted)
    {
        if (await CrossPermissions.Current.ShouldShowRequestPermissionRationaleAsync(Permission.Location))
        {
            //Gunna need that location
        }

        status = await CrossPermissions.Current.RequestPermissionAsync<LocationPermission>();
    }

    if (status == PermissionStatus.Granted)
    {
        //Query permission
    }
    else if (status != PermissionStatus.Unknown)
    {
        //location denied
    }
}
catch (Exception ex)
{
  //Something went wrong
}

Более подробную информацию о плагине вы можете проверить https://github.com/jamesmontemagno/PermissionsPlugin

...