Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Java.IO.FileInputStream(file) - Como encontrar o Arquivo? (Não encontra!)

Bom dia. Meu código.

Page.xaml

<StackLayout>
        <Button x:Name="btnCamera" Command="{Binding CaptureImageFileCommand,Mode=OneWay}" Text="Camera"></Button>
        <Button x:Name="btnFiles" Command="{Binding OpenFileStorageCommand,Mode=OneWay}" Text="Files"></Button>
</StackLayout>

ViewModel.cs

public ICommand OpenFileStorageCommand { get; }
      public ICommand CaptureImageFileCommand { get; }


      OpenFileStorageCommand = new Command(ExecuteOpenFileStorageCommand);
      CaptureImageFileCommand = new Command(ExecuteCaptureImageFileCommand);

    //Métodos - não tem implementação pois vou fazer outra coisa com os bytes, mas está funcionando(camera)
    //estou usando a mesma interface ICamera no dependency.
     private void ExecuteOpenFileStorageCommand()
        {
            DependencyService.Get<ICamera>().CapturarMedia("FileStorage");
            MessagingCenter.Subscribe<byte[]>(this, "FileStorage",
                (bytes) =>
                {

                });
        }
        private void ExecuteCaptureImageFileCommand()
        {            
            DependencyService.Get<ICamera>().CapturarMedia("CameraImagem");
            MessagingCenter.Subscribe<byte[]>(this, "CameraImagem",
                (bytes) =>
                {

                });
        }

Activity.cs

 public void CapturarMedia(string media)
        {
            switch (media)
            {
                case "CameraImagem":
                    CameraImagem();
                    break;
                case "CameraVideo":
                    CameraVideo();
                    break;
                case "FileStorage":
                    FileStorage();
                    break;

            }
        }
private void CameraImagem()
        {
            Intent intent = new Intent(MediaStore.ActionImageCapture);

            File diretorio = new File(
                Android.OS.Environment.GetExternalStoragePublicDirectory(
                Android.OS.Environment.DirectoryPictures), "Imagens");

            if (!diretorio.Exists())
                diretorio.Mkdirs();

            arquivoImagem = new File(diretorio,
                System.DateTime.Now.Ticks.ToString() + ".jpg");

            intent.PutExtra(MediaStore.ExtraOutput,
                Android.Net.Uri.FromFile(arquivoImagem));

            var activity = Forms.Context as Activity;
            activity.StartActivityForResult(intent, 1);
        }

private void FileStorage()
        {
            Intent intent = new Intent(MediaStore.ExtraMediaAlbum);
            intent.SetType("*/*");
            intent.SetAction(Intent.ActionGetContent);

            var activity = Forms.Context as Activity;
            activity.StartActivityForResult(Intent.CreateChooser(intent, "Select File"), 2);
        }

protected override void OnActivityResult(int requestCode, Result resultCode, Intent data)
        {
            base.OnActivityResult(requestCode, resultCode, data);

            if (resultCode == Result.Ok && requestCode == 1)
            {
                byte[] bytes;
                using (var stream = new Java.IO.FileInputStream(arquivoImagem))
                {
                    bytes = new byte[arquivoImagem.Length()];
                    stream.Read(bytes);
                }
                //string formmattedPic = Convert.ToBase64String(bytes);

                MessagingCenter.Send<byte[]>(bytes, "CameraImagem");
            }
            else if ((requestCode == 2) && (resultCode == Result.Ok) && (data != null))
            {
//O problema esta na leitura do caminho do arquivo
//que está na variável data, o Java.IO.FileInputStream(file)
//não encontra o arquivo
                string file = data.Data.ToString();
                byte[] bytes;
//Aqui neste ponto ocorre a exceção
                using (var stream = new Java.IO.FileInputStream(file))
                {
                    bytes = new byte[arquivoImagem.Length()];
                    stream.Read(bytes);
                }

                MessagingCenter.Send<byte[]>(bytes, "FileStorage");
            }
        }

O problema está na leitura do caminho do arquivo que está na variável data (em requestCode == 2), o Java.IO.FileInputStream(file) não encontra o arquivo... Existe outra forma de capturar o arquivo? Ou esta metodologia poderá ser ajustada? Se alguém souber e puder dar uma luz, agradeço!

1 resposta
solução!

Duplicado: https://cursos.alura.com.br/forum/topico-java-io-fileinputstream-file-como-encontrar-o-arquivo-43737