Ошибка открытия камеры с помощью Xamarin.Forms и Prism - PullRequest
0 голосов
/ 15 января 2019

Код сзади


    async Task BtnCameraEvento()
    {
        try
        {
            await CrossMedia.Current.Initialize();

            //Verifica se a camera está disponivel
            if (!CrossMedia.Current.IsTakePhotoSupported || !CrossMedia.Current.IsCameraAvailable)
            {
                await App.Current.MainPage.DisplayAlert("Aviso", "Nenhuma camera detectada", "OK");

                return;
            }

            //tira a foto
            var file = await CrossMedia.Current.TakePhotoAsync(
            new StoreCameraMediaOptions
            {
                SaveToAlbum = false,
                Directory = "Demo",
                Name = "foto"
            });

            //Verifica se foi tirado alguma foto
            if (file == null)
                return;

            //Adiciona a foto a lista de imagens
            _imageList.Add(file.Path);
        }
        catch (Exception ex)
        {
            int x = 1;
        }
    }

В строке «CrossMedia.Current.TakePhotoAsync» появляется следующая ошибка:

"Невозможно получить местоположение файла. Скорее всего, это означает, что информация о поставщике файлов не задана в файле манифеста Android. Пожалуйста, ознакомьтесь с документацией о том, как настроить это в вашем проекте."

1 Ответ

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

См., В частности, этот раздел документов, связанных с sushihangover:

https://github.com/jamesmontemagno/MediaPlugin#android

Копируется здесь в случае разрыва связи:

Android

Требуются разрешения WRITE_EXTERNAL_STORAGE & READ_EXTERNAL_STORAGE, но библиотека автоматически добавит это для вас. Кроме того, если ваши пользователи используют Marshmallow, плагин автоматически запросит у них разрешения во время выполнения. Вы должны добавить код модуля доступа в основную или базовую деятельность:

Добавить в Активность:

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

Настройка текущей активности Android

Этот плагин использует плагин Current Activity для получения доступа к текущей активности Android. Обязательно завершите полную настройку, если файл MainApplication.cs не был автоматически добавлен в ваше приложение. Пожалуйста, полностью прочитайте документацию по текущему плагину В абсолютном минимуме вы должны установить следующее в методе OnCreate вашей Деятельности:

CrossCurrentActivity.Current.Init(this, bundle);

Настоятельно рекомендуется использовать пользовательское приложение, описанное в документации по текущему подключаемому модулю] (https://github.com/jamesmontemagno/CurrentActivityPlugin/blob/master/README.md)

Разные настройки Android

При добавлении этих разрешений Google Play автоматически отфильтровывает устройства без специального оборудования. Вы можете обойти это, добавив следующее в файл AssemblyInfo.cs в вашем проекте Android:

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

Настройка поставщика файлов Android

Вы также должны добавить несколько дополнительных файлов конфигурации, чтобы придерживаться нового строгого режима:

1.) Добавьте следующее в ваш AndroidManifest.xml внутри тегов :

<provider android:name="android.support.v4.content.FileProvider" 
      android:authorities="${applicationId}.fileprovider" 
      android:exported="false" 
      android:grantUriPermissions="true">

      <meta-data android:name="android.support.FILE_PROVIDER_PATHS" 
                 android:resource="@xml/file_paths"></meta-data>
</provider>

2.) Добавьте новую папку с именем xml в папку ресурсов и добавьте новый файл XML с именем file_paths.xml. Убедитесь, что этот XML-файл имеет действие сборки: AndroidResource.

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

<?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>

Подробнее читайте по адресу: https://developer.android.com/training/camera/photobasics.html

...