.
Não apenas mostro como abrir PDF programaticamente, mas também como corrigir android.os.FileUriExposedException: exposto além do aplicativo por meio do erro Intent.getData().
Ontem, recebi um e-mail de um de nossos leitores e ele me pediu para corrigir o problema que não conseguia abrir PDFs de armazenar quando o usuário clicou no botão.
E seu aplicativo estava funcionando perfeitamente em uma versão mais antiga do Android. Após o Android 11, seu aplicativo não estava funcionando conforme seu plano.
Pensei em resolver isso, mas eles não compartilharam o código completo, então pensei, por que não criar um aplicativo de demonstração do zero para nossos leitores?
Ao desenvolver o aplicativo de demonstração para abrir arquivos PDF, recebi os seguintes erros: “android.os.FileUriExposedException: file:///storage/emulated/0/TRENDOCEANS.pdf exposto além do aplicativo por meio de Intent.getData()” e “Não foi possível encontrar metadados para provedor com autoridade”. Se você também receber esse tipo de erro, poderá ler nosso artigo dedicado a esse problema.
Abra o PDF programaticamente usando a intenção
Antes de iniciar o processo, deixe-me percorrer o conceito de nosso aplicativo de demonstração.
Em primeiro lugar, vamos pedir permissão, então o usuário verá um botão que invocará a intenção de abrir um arquivo pdf que já está disponível na pasta raiz do dispositivo, e é isso.
Justo!
Crie um novo projeto no Android Studio
Não vou mostrar como criar um novo projeto no Android Studio porque você sabe fazer isso muito bem.
Ainda assim, se quiser, dê uma espiada em como criar um novo projeto no Android Studio, que é bem parecido com este projeto.
Crie um layout básico em activity_main.xml
Depois de criar um novo projeto, a primeira coisa que você precisa fazer é modificar activity_main.xml para adicionar um botão que vai invocar o openPDF() método, que vamos criar no Atividade principal arquivo.
E o restante das opções são apenas para apelo visual, que você pode pular por enquanto.
Modificar AndroidManifest.xml
Agora você vai modificar AndroidManifest.xml adicionar
O primeiro
Para saber mais sobre isso leia filtragem de pacotes.
E o último
Se você estiver usando Androide 12, você verá dois tipos de permissão disponíveis em comparação com a versão anterior do Android quando quiser ler arquivos.
Na parte inferior, você precisa adicionar
No momento, você não pode acessar nenhum arquivo diretamente. Primeiro, você precisa adicionar a tag
e especificar o local em @xml/file_path.xml “Não foi possível encontrar metadados para o provedor com autoridade.”
Crie um file_path no XML Resource Path
O arquivo @xml/file_path será destacado em vermelho para indicar o arquivo ausente.
Simplesmente, você só precisa passar o mouse sobre @xml/file_path e clique em Criar arquivo de recurso XML” para criar o arquivo ausente.

A próxima tela solicitará que você insira os seguintes detalhes: Após fazer as alterações, clique em “OK” para seguir em frente.

E copie o conteúdo abaixo para @xml/file_path para ler o diretório raiz do armazenamento externo com o “arquivo_externo” nome.
Modifique MainActivity para abrir arquivo PDF em aplicativos externos
Primeiro, você precisa adicionar um valor constante estático para verificação de permissão sob o Atividade principal aula. Para isso, você pode simplesmente copiar o código abaixo e colá-lo em seu editor.
Dentro de onCreate método, você precisa chamar verifiqueStoragePermission (este). Depois disso, inicialize o botão para definir um ouvinte de clique.
Sob o ouvinte de clique, crie um novo método chamado abraPDF ().
Esse VerifyStoragePermission O método é usado para solicitar e verificar a permissão de leitura.
A primeira etapa será usada para verificar o status atual da permissão. Se é –1, em seguida, ele solicitará que você aceite a permissão.
Para o Android 12, os dispositivos precisam de permissão extra para ler todos os arquivos, e é por isso que usaremos o Intent para pedir permissão para leia todas as permissões de acesso a arquivos.
Dentro openPDF()você precisa especificar a localização do PDF arquivo usando o Arquivo classe e salvar o valor em um variável de arquivo, que você vai usar em uriPdfPath declarar o caminho; depois disso, usando Intenção, você pode ligar para um externo aplicativo para ler o PDF.
Anteriormente, usamos “Uri path = Uri.fromFile(arquivo);” para obter o URI de um local, mas não está mais funcionando, então você deve usar “Uri uriPdfPath = FileProvider.getUriForFile()” e especifique o .fornecedor declarar o local que você vai acessar em @xml/file_path.xml.
E esse é o motivo do seguinte erro: “android.os.FileUriExposedException: file:///storage/emulated/0/TRENDOCEANS.pdf exposto além do aplicativo por meio de Intent.getData()”
Antes de executar o aplicativo, verifique o código de Atividade principal.
Executar aplicativo para ler PDF
Assim que o aplicativo estiver pronto, instale-o em seu dispositivo e teste a funcionalidade. Antes disso, mantenha o PDF no local especificado em seu dispositivo.



Embrulhar
Isso é tudo para abrir o PDF programaticamente usando o Intent no Android.
Junto com isso, mostramos a você o método para resolver “android.os.FileUriExposedException: file:///storage/emulated/0/TRENDOCEANS.pdf exposto além do aplicativo por meio de Intent.getData()” e “Não foi possível encontrar metadados para provedor com autoridade”.
Se você está preso em algum lugar, informe-nos na seção de comentários.

Um homem com uma tecnologia efusiva que explorou algumas das incríveis coisas da tecnologia e está explorando mais. Enquanto avançava, tive a chance de trabalhar no desenvolvimento Android, Linux, AWS e DevOps com várias ferramentas de código aberto.
.








