technology

Como abrir PDF programaticamente usando a intenção no Android

.

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 e tags aninhadas com o marcação.

O primeiro adicionará a tag android_name=”android.permission.QUERY_ALL_PACKAGES” para listar os aplicativos instalados que podem manipular ou ler este arquivo pdf.

Para saber mais sobre isso leia filtragem de pacotes.

E o último é necessário para o mais recente versão do Android.

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.

Lista de permissões no Android 12 para ler o arquivo

Na parte inferior, você precisa adicionar tag, que está aninhada com tag, para fornecer um local para acessar o diretório de armazenamento.

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.

Clique em “Criar arquivo de recurso xml”

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

Altere os elementos raiz para "caminhos"
Altere os elementos raiz para “caminhos”

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.

.

Mostrar mais

Artigos relacionados

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Botão Voltar ao topo