Quantcast
Channel: Recent Threads — Xamarin Community Forums
Viewing all articles
Browse latest Browse all 204402

Open Downloaded file in my app

$
0
0

Hello I have a problem to open file after download it, follow my code:

In my xamarin.forms my abstract class:

namespace TrackerMobile.Forms.Util
{
    public abstract class IManipuladorArquivo
    {

        public async Task BaixarArquivo(Func<Task<Stream>> taskRelatorio, string nomeArquivo, IPageDialogService pageDialogService)
        {
            await Task.Run(() =>
            {
                try
                {
                    string caminhoArquivo = MontarCaminhoArquivo(nomeArquivo);
                    using (Stream arquivo = taskRelatorio().Result)
                    {
                        if (arquivo != null)
                        {
                            byte[] arquivoByte = new byte[arquivo.Length];
                            using (MemoryStream ms = new MemoryStream())
                            {
                                int read;
                                while ((read = arquivo.Read(arquivoByte, 0, arquivoByte.Length)) > 0)
                                {
                                    ms.Write(arquivoByte, 0, read);
                                }
                                File.WriteAllBytes(caminhoArquivo, ms.ToArray());
                            }

                        }
                        else
                        {
                            Device.BeginInvokeOnMainThread(() => 
                                pageDialogService.DisplayAlertAsync(AppResources.RelatorioPercursosAnteriores_Titulo,
                                                                    AppResources.RelatorioPercursosAnteriores_SemDados,
                                                                    AppResources.MensagemGenerica_Dialog_OpcaoOk));
                            return;
                        }
                    }
                    Device.BeginInvokeOnMainThread(async () =>
                    {
                        if (await pageDialogService.DisplayAlertAsync(AppResources.RelatorioPercursosAnteriores_Titulo,
                                string.Format(AppResources.RelatorioPercursosAnteriores_MensagemConclusao, nomeArquivo),
                                AppResources.MensagemGenerica_Dialog_OpcaoSim,
                                AppResources.MensagemGenerica_Dialog_OpcaoNao))
                        {
                            AbrirArquivo(caminhoArquivo);
                        }
                    });
                }
                catch (Exception)
                {
                    Device.BeginInvokeOnMainThread(() => pageDialogService.DisplayAlertAsync(AppResources.RelatorioPercursosAnteriores_Titulo,
                                                                                            AppResources.RelatorioPercursosAnteriores_ErroGeracaoRelatorio,
                                                                                            AppResources.MensagemGenerica_Dialog_OpcaoOk));
                }
            });
        }
        protected abstract void AbrirArquivo(string caminhoArquivo);
        protected abstract string MontarCaminhoArquivo(string nomeArquivo);
    }
}

Implementation in my android project:

namespace TrackerMobile.Forms.Droid
{
    public class AndroidManipuladorArquivo : IManipuladorArquivo
    {

        protected override string MontarCaminhoArquivo(string nomeArquivo)
            => Path.Combine(AndrdoidEv.ExternalStorageDirectory.Path, AndrdoidEv.DirectoryDownloads, nomeArquivo);

        protected override void AbrirArquivo(string caminhoArquivo)
        {
            Java.IO.File file = new Java.IO.File(caminhoArquivo);
            file.SetReadable(true);

            string application = "";
            string extensao = Path.GetExtension(caminhoArquivo);

            switch (extensao.ToLower())
            {
                case ".pdf":
                    application = "application/pdf";
                    break;
                case ".xls":
                case ".xlsx":
                    application = "application/vnd.ms-excel";
                    break;
                default:
                    application = "*/*";
                    break;
            }
            AndrdoidUri uriArquivo = FileProvider.GetUriForFile(Application.Context, "TrackerMobile.Forms.Android.provider", file);
            Intent intent = new Intent(Intent.ActionView);
            intent.SetDataAndType(uriArquivo, application);
            intent.SetFlags(ActivityFlags.ClearWhenTaskReset | ActivityFlags.NewTask);
            Application.Context.StartActivity(intent);
        }

    }
}

When my app try to open a file the intent stay blank, but when I a try access it in a file system and try to open its work normally.

I try to check my file using 'File.Exists(caminhoArquivo);' the verification return true, please help-me


Viewing all articles
Browse latest Browse all 204402

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>