top of page
Search

Java.io.filenotfoundexception Storage Emulated 0 Download

  • caroylnmad9
  • Aug 25, 2023
  • 6 min read


Como corrigir java.io.FileNotFoundException: /storage/emulated/0/download/ Error no Android




Se você estiver desenvolvendo um aplicativo que precisa acessar arquivos do armazenamento interno do seu dispositivo Android, poderá encontrar o erro java.io.FileNotFoundException: /storage/emulated/0/download/. Este erro significa que seu aplicativo não pode encontrar ou abrir o arquivo que você está tentando ler ou gravar. Neste artigo, explicaremos o que causa esse erro, como isso afeta seu aplicativo e como você pode corrigi-lo usando quatro métodos diferentes.




java.io.filenotfoundexception storage emulated 0 download




O que é java.io.FileNotFoundException: /storage/emulated/0/download/ Error?




O erro java.io.FileNotFoundException: /storage/emulated/0/download/ é um tipo de IOException que ocorre quando seu aplicativo tenta acessar um arquivo que não existe ou não está acessível. O caminho /storage/emulated/0/download/ é o local padrão para arquivos baixados em dispositivos Android. No entanto, esse caminho pode não estar disponível ou visível para seu aplicativo por vários motivos.


Causas do erro




Algumas das possíveis causas do erro java.io.FileNotFoundException: /storage/emulated/0/download/ são:


  • O arquivo que você está tentando acessar não existe ou foi deletado.



  • O arquivo que você está tentando acessar está em um local diferente de /storage/emulated/0/download/.



  • Seu aplicativo não tem as permissões necessárias para ler ou gravar arquivos do armazenamento interno.



  • Seu app é destinado ao Android 10 ou superior e não é compatível com o armazenamento com escopo.



  • Seu app é destinado ao Android 11 ou superior e não tem a permissão MANAGE_EXTERNAL_STORAGE.



Sintomas do erro




Alguns dos sintomas do erro java.io.FileNotFoundException: /storage/emulated/0/download/ são:


  • Seu aplicativo trava ou congela ao tentar acessar um arquivo do armazenamento interno.



  • Seu aplicativo exibe uma mensagem de erro ou uma tela em branco ao tentar acessar um arquivo do armazenamento interno.



  • Seu aplicativo não pode carregar ou baixar arquivos do armazenamento interno.



  • Seu aplicativo não pode criptografar ou descriptografar arquivos do armazenamento interno.



Como resolver java.io.FileNotFoundException: /storage/emulated/0/download/ Error?




Dependendo da causa e da versão de destino do seu aplicativo, você pode usar um dos seguintes métodos para resolver o java.io.FileNotFoundException: /storage/emulated/0/download/ error:


Método 1: conceder permissões de armazenamento ao seu aplicativo




Se seu aplicativo não tiver as permissões READ_EXTERNAL_STORAGE e WRITE_EXTERNAL_STORAGE, ele não poderá acessar arquivos do armazenamento interno. Para conceder essas permissões, você precisa declará-las em seu arquivo de manifesto e solicitá-las ao usuário em tempo de execução. Aqui estão as etapas para conceder permissões de armazenamento ao seu aplicativo:


Etapas para conceder permissões de armazenamento




  • Em seu arquivo de manifesto, adicione essas linhas dentro do marcação:



  • Em sua atividade ou fragmento, verifique se você tem essas permissões usando este método:



private boolean checkStoragePermissions() int readPermission = ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE); int writePermission = ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE); return readPermission == PackageManager.PERMISSION_GRANTED && writePermission == PackageManager.PERMISSION_GRANTED;


  • Se o método retornar falso, solicite as permissões usando este método:



private void requestStoragePermissions() ActivityCompat.requestPermissions(this, new String[]Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE, STORAGE_REQUEST_CODE);


  • Substitua o método onRequestPermissionsResult para lidar com a resposta do usuário:



@Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) super.onRequestPermissionsResult(requestCode, permissions, grantResults); if (requestCode == STORAGE_REQUEST_CODE) if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED && grantResults[1] == PackageManager.PERMISSION_GRANTED) // Permissão concedida, continue com o acesso ao arquivo else // Permissão negada, mostre um brinde ou uma caixa de diálogo


Método 2: use o atributo android:requestLegacyExternalStorage="true" em seu arquivo de manifesto




Se seu aplicativo for destinado ao Android 10 ou superior e não for compatível com armazenamento com escopo, você poderá usar o atributo android:requestLegacyExternalStorage="true" em seu arquivo de manifesto para desativar o armazenamento com escopo e acessar arquivos do armazenamento interno como antes. No entanto, esta é uma solução temporária e não funcionará no Android 11 ou superior. Aqui estão as etapas para usar o atributo android:requestLegacyExternalStorage="true":


Etapas para usar o atributo android:requestLegacyExternalStorage="true"




  • Em seu arquivo de manifesto, adicione esta linha dentro do marcação:



android:requestLegacyExternalStorage="true"


  • Certifique-se de ter as permissões READ_EXTERNAL_STORAGE e WRITE_EXTERNAL_STORAGE declaradas e solicitadas conforme explicado no Método 1.



  • Acesse arquivos do armazenamento interno usando a classe File ou as classes FileInputStream e FileOutputStream.



Método 3: Use a intenção ACTION_OPEN_DOCUMENT para permitir que o usuário escolha o arquivo




Se seu aplicativo só precisa ler ou gravar um único arquivo do armazenamento interno, você pode usar a intenção ACTION_OPEN_DOCUMENT para permitir que o usuário escolha o arquivo de um seletor de arquivos do sistema. Dessa forma, você não precisa solicitar nenhuma permissão ou desativar o armazenamento com escopo. Aqui estão as etapas para usar a intenção ACTION_OPEN_DOCUMENT:


Etapas para usar a intenção ACTION_OPEN_DOCUMENT




  • Crie um intent com a ação ACTION_OPEN_DOCUMENT e defina o tipo de arquivo que deseja acessar:



Intenção intenção = nova Intenção(Intenção.ACTION_OPEN_DOCUMENT); intent.setType("aplicativo/pdf"); // Por exemplo, se você deseja acessar arquivos PDF


  • Inicie a intenção com startActivityForResult e passe um código de solicitação:



startActivityForResult(intenção, FILE_REQUEST_CODE);


  • Substitua o método onActivityResult para lidar com a seleção do usuário:



@Override protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) super.onActivityResult(requestCode, resultCode, data); if (requestCode == FILE_REQUEST_CODE && resultCode == RESULT_OK && data != null) Uri uri = data.getData(); // Este é o URI do arquivo selecionado // Use um ContentResolver para abrir um InputStream ou um OutputStream para ler ou gravar o arquivo


Método 4: Solicite a permissão MANAGE_EXTERNAL_STORAGE em seu arquivo de manifesto e deixe o usuário confirmar




Se seu aplicativo for direcionado ao Android 11 ou superior e precisar acessar vários arquivos do armazenamento interno para uma finalidade legítima, você poderá solicitar a permissão MANAGE_EXTERNAL_STORAGE em seu arquivo de manifesto e permitir que o usuário confirme nas configurações. Essa permissão permite que seu aplicativo acesse todos os arquivos do armazenamento interno sem desativar o armazenamento com escopo. No entanto, essa permissão é considerada perigosa e deve ser usada com moderação. Aqui estão as etapas para solicitar a permissão MANAGE_EXTERNAL_STORAGE:


Etapas para solicitar a permissão MANAGE_EXTERNAL_STORAGE




  • Em seu arquivo de manifesto, adicione esta linha dentro do marcação:



  • Em sua atividade ou fragmento, verifique se você tem essa permissão usando este método:



private boolean checkManageExternalStoragePermission() return Environment.isExternalStorageManager();


  • Se o método retornar false, crie um intent com a ação ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION e inicie-o com startActivity:



private void requestManageExternalStoragePermission() Intent intent = new Intent(Settings.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION); Uri uri = Uri.fromParts("pacote", getPackageName(), null); intent.setData(uri); startActivity(intenção);


  • O usuário será levado para as configurações onde pode permitir que seu aplicativo acesse todos os arquivos. Depois de fazer isso, você pode acessar os arquivos do armazenamento interno usando a classe File ou as classes FileInputStream e FileOutputStream.



Conclusão




Neste artigo, explicamos o que é o erro java.io.FileNotFoundException: /storage/emulated/0/download/, o que o causa e como corrigi-lo usando quatro métodos diferentes. Esperamos que este artigo tenha ajudado você a resolver esse erro e acessar os arquivos do armazenamento interno do seu dispositivo Android. Se você tiver alguma dúvida ou feedback, informe-nos nos comentários abaixo.


perguntas frequentes




Aqui estão algumas perguntas frequentes sobre o java.io.FileNotFoundException: /storage/emulated/0/download/ error:


P: O que é armazenamento com escopo e por que ele afeta o acesso a arquivos?




R: O armazenamento com escopo é um recurso introduzido no Android 10 que limita o acesso de aplicativos a arquivos do armazenamento interno e externo. O armazenamento com escopo visa melhorar a privacidade e a segurança dos dados dos usuários, dando a eles mais controle sobre quais aplicativos podem acessar seus arquivos. O armazenamento com escopo afeta o acesso a arquivos porque restringe o uso de caminhos de arquivo e exige que os aplicativos usem outros métodos, como intenções, provedores de conteúdo ou APIs de armazenamento de mídia para acessar arquivos.


P: Como posso verificar se meu aplicativo é compatível com armazenamento com escopo?




R: Você pode verificar se seu aplicativo oferece suporte ao armazenamento com escopo observando o atributo targetSdkVersion em seu arquivo de manifesto. Se seu targetSdkVersion for 29 ou superior, seu aplicativo oferece suporte ao armazenamento com escopo por padrão.Se seu targetSdkVersion for inferior a 29, seu aplicativo não oferece suporte ao armazenamento com escopo, a menos que você opte por usar o atributo android:preserveLegacyExternalStorage="true" em seu arquivo de manifesto.


P: Como posso testar meu aplicativo para compatibilidade de armazenamento com escopo?




R: Você pode testar seu aplicativo para compatibilidade de armazenamento com escopo usando o Android Emulator ou um dispositivo físico executando o Android 10 ou superior. Você também pode usar o comando adb shell para alterar o valor do sinalizador external_storage_legacy para habilitar ou desabilitar o armazenamento com escopo para seu aplicativo.


P: Quais são algumas práticas recomendadas para acessar arquivos do armazenamento interno?




R: Algumas das práticas recomendadas para acessar arquivos do armazenamento interno são:


  • Use o método getExternalFilesDir() para obter um diretório que é privado para seu aplicativo e não requer nenhuma permissão.



  • Use o método getExternalCacheDir() para obter um diretório que é privado para seu aplicativo e é limpo quando o usuário limpa o cache.



  • Use a API MediaStore para acessar arquivos de mídia, como imagens, vídeos e áudio.



  • Use o Storage Access Framework (SAF) para permitir que o usuário escolha arquivos de um seletor de arquivos do sistema.



  • Use a API DocumentsContract para criar, renomear, mover ou excluir arquivos de um seletor de arquivos do sistema.



  • Use a API DownloadManager para baixar arquivos da Internet e salvá-los no armazenamento interno.



  • Evite codificar caminhos de arquivo e, em vez disso, use caminhos relativos.



  • Evite acessar arquivos que pertencem a outros aplicativos, a menos que você tenha permissão.



P: Onde posso encontrar mais informações sobre acesso a arquivos no Android?




R: Você pode encontrar mais informações sobre o acesso a arquivos no Android visitando estes links:














0517a86e26


 
 
 

Recent Posts

See All
Survivor IO Grátis sem Download

Survivor.io: um jogo de sobrevivência online grátis que você pode jogar sem baixar Você ama jogos de sobrevivência? Você quer jogar um...

 
 
 

Comments


© 2023 by J.A Photography. Proudly created with Wix.com

bottom of page