Xamarin формы: камера и галерея не работают в Android, показывая исключение разрешения - PullRequest
0 голосов
/ 02 января 2019

Получение следующего исключения при загрузке камеры и галереи в моем проекте.

Камера

Исключение:> Plugin.Media.Abstractions.MediaPermissionException: требуется разрешение камеры. в Plugin.Media.MediaImplementation + d__17.MoveNext () [0x0009

Галерея

Не выдано разрешение на хранение, запрос 01-02 15: 16: 08.566 I / mono-stdout (12958): Не выдано разрешение на хранение, запрос. Разрешение на хранение отказано. 01-02 15: 16: 08.567 I / mono-stdout (12958): Отказано в разрешении на хранение. [0:] Исключение:> Plugin.Media.Abstractions.MediaPermissionException: Требуется разрешение (я) на хранение. в Plugin.Media.MediaImplementation + d__16.MoveNext () [0x00091] в <5939e997f291496f805023da28f3a447>: 0 --- Конец стека трассировки от предыдущего местоположения, где было сгенерировано исключение ---

Я добавил все разрешения в мой файл манифеста.

<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

Добавлены следующие коды в основной деятельности:

[assembly: UsesFeature("android.hardware.camera", Required = false)]
[assembly: UsesFeature("android.hardware.camera.autofocus", Required = false)]

public override void OnRequestPermissionsResult(int requestCode, string[] permissions, Permission[] grantResults)
 {
     PermissionsImplementation.Current.OnRequestPermissionsResult(requestCode, permissions, grantResults);
 }

Сведения о поставщике в файле манифеста:

<provider android:name="android.support.v4.content.FileProvider" android:authorities="{packagename}.fileprovider" android:exported="false" android:grantUriPermissions="true">
    <meta-data android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/file_paths"></meta-data>
</provider>

file_paths.xml

<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
    <external-files-path name="my_images" path="Pictures" />
    <external-files-path name="my_movies" path="Movies" />
</paths>

Коды камеры и галереи:

 public async void OpenMygallery()
    {
        try
        {
            await CrossMedia.Current.Initialize();

            if (!CrossMedia.Current.IsPickPhotoSupported)
            {
                ShowAlert("No photos available.");
                return;
            }

            _mediaFile = await CrossMedia.Current.PickPhotoAsync();

            if (_mediaFile == null)
                return;

            tweetPicture.Source = ImageSource.FromStream(() =>
            {
                return _mediaFile.GetStream();
            });
        }
        catch (Exception ex)
        {
            System.Diagnostics.Debug.WriteLine("Exception:>" + ex);
        }
    }

public async void OpenMyCamera()
    {
        try
        {
            await CrossMedia.Current.Initialize();

            if (!CrossMedia.Current.IsCameraAvailable || !CrossMedia.Current.IsTakePhotoSupported)
            {
                ShowAlert("No camera available.");
                return;
            }

            _mediaFile = await CrossMedia.Current.TakePhotoAsync(new Plugin.Media.Abstractions.StoreCameraMediaOptions
            {
                Directory = "Sample",
                Name = "test.jpg",
                AllowCropping = true
            });

            if (_mediaFile == null)
                return;

            tweetPicture.Source = ImageSource.FromStream(() =>
            {
                return _mediaFile.GetStreamWithImageRotatedForExternalStorage();
            });
        }
        catch (Exception ex)
        {
            System.Diagnostics.Debug.WriteLine("Exception:>" + ex);
        }
    }

Информация об ошибке:

Номер версии плагина: 4.0.1.5

Устройство протестировано: Redmi Note 5 Pro

Версия VS: 15.9.3

Версия Xamarin: 3.4.0.1008975

Кто-нибудь может предложить решение для этого?

1 Ответ

0 голосов
/ 02 января 2019

Установка разрешений в файлах manifest / info.plist является первым шагом, но пользователь должен также предоставить эти разрешения.

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

Взгляните на Плагин разрешений Джеймса Монтемагно о проверках и запросах разрешений.

...