1
resposta

Como visualizar um arquivo temporário (tempfile) com uma Intent ?

Tenho o seguinte código ...

private void visualizarArquivo(ArquivoEntrada arquivoEntrada) {
        try {
            String extension = FileUtil.getExtension(arquivoEntrada.getNome());
            String name = FileUtil.getName(arquivoEntrada.getNome());
            //
            File file = File.createTempFile(name, extension, this.getContext().getCacheDir());
            Uri fileUri = Uri.fromFile(file);
            byte[] dados = this.arquivoEntradaDao.getDadosArquivo(arquivoEntrada);
            this.writeFileData(fileUri, dados);
            //
            IntentUtil.viewFile(this.getContext(), fileUri);
        } catch (Exception e) {
            System.out.println();
        }
    }

... com este código eu consigo criar um arquivo temporário e escrever dados no arquivo temporário.

Tudo funciona perfeito e sem erro, até a hora em que a intent (para visualizar o arquivo) é invocada. Quando a intent é invocada, é lançada a exceção abaixo.

android.os.FileUriExposedException: file:///data/user/0/org.jacusoft.android.moneytracker_android/cache/Comprovante_09-09-2020_1609476886446040213969003.pdf exposed beyond app through Intent.getData()

O código para invocar a intente é o seguinte ...

  public static void viewFile(Context context, Uri uri) {
        Intent intent = new Intent(Intent.ACTION_VIEW);
        intent.setData(uri);
        Intent intentChooser = Intent.createChooser(intent, "Choose an application to open with:");
        context.startActivity(intentChooser);
    }

Como resolver esse problema ?

1 resposta

Marcelo, tudo bem ?

Você precisa gerar a uri pra essa imagem atraves do FileProvider, acredito que vimos isso aqui em algum curso.

De toda forma, desde a versão 7 do android mandar o path completo é considerado um erro e devemos evitar isso.

Esse FileProvider substitui o path absoluto por alias.