Ola estou tentando ler um arquivo PDF que esta gravado na pasta raiz de um dispositivo android, mas nao esta abrindo, alguem consegue me ajudar? Segue meu codigo:
public void visualizarPedido(){
@SuppressWarnings("deprecation")FilepdfFile=newFile(Environment.getExternalStorageDirectory().getAbsolutePath()+"/"+"pedido.pdf");if(pdfFile.exists()){IntentpdfIntent=newIntent();pdfIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);Path=Uri.fromFile(pdfFile);pdfIntent.setType("application/pdf");pdfIntent.setData(Path);pdfIntent.putExtra("",Path);pdfIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);try{startActivity(pdfIntent);VisualizarPedido.super.onBackPressed();}catch(ActivityNotFoundExceptione){finalAlertDialog.Builderb=newAlertDialog.Builder(this);alert=b.setCancelable(false).setPositiveButton("OK",newOnClickListener(){@OverridepublicvoidonClick(DialogInterfacedialog,intwhich){alert.dismiss();VisualizarPedido.super.onBackPressed();}}).setMessage("Nenhum Programa para Visualizar Arquivo em PDF Instalado!").create();alert.show();}catch(Exceptione){Log.e("ERRO",e.getMessage());}}}
Sim em versoes mais recentes do android ele nao abre o arquivo pdf
R
rodriguesabner
mas gera erro?? Se sim, qual?
M
Matheus_Tavares1
android.os.FileUriExposedException: file:///storage/emulated/0/pedido.pdf exposed beyond app through Intent.getData()
esse é o erro gerado.
R
rodriguesabner
M
Matheus_Tavares1
Minha classe esta assim agora:
public void visualizarPedido(){
intSDK_INT=android.os.Build.VERSION.SDK_INT;IntentpdfIntent=newIntent();StringcaminhoPdf=getExternalFilesDir(null)+"/"+System.currentTimeMillis()+"pedido.pdf";Filepdf=newFile(caminhoPdf);UripdfURI=FileProvider.getUriForFile(VisualizarPedido.this,BuildConfig.APPLICATION_ID+".provider",pdf);pdfIntent.putExtra(MediaStore.EXTRA_OUTPUT,pdfURI);try{startActivity(pdfIntent);VisualizarPedido.super.onBackPressed();}catch(ActivityNotFoundExceptione){finalAlertDialog.Builderb=newAlertDialog.Builder(this);alert=b.setCancelable(false).setPositiveButton("OK",newOnClickListener(){@OverridepublicvoidonClick(DialogInterfacedialog,intwhich){alert.dismiss();VisualizarPedido.super.onBackPressed();}}).setMessage("Nenhum Programa para Visualizar Arquivo em PDF Instalado!").create();alert.show();}catch(Exceptione){Log.e("ERRO",e.getMessage());}}
Porem esta retornando esse erro agora: java.lang.NullPointerException: Attempt to invoke virtual method ‘android.content.res.XmlResourceParser android.content.pm.ProviderInfo.loadXmlMetaData(android.content.pm.PackageManager, java.lang.String)’ on a null object reference
M
Matheus_Tavares1
Fiz umas alterações no meu xml e a classe esta assim agora:
public void visualizarPedido(){
StringcaminhoPdf=getExternalFilesDir(null)+"/"+"pedido.pdf";Filepdf=newFile(caminhoPdf);UripdfURI=FileProvider.getUriForFile(VisualizarPedido.this,BuildConfig.APPLICATION_ID+".provider",pdf);IntentpdfIntent=newIntent(Intent.ACTION_VIEW,pdfURI);pdfIntent.putExtra("",pdfURI);try{startActivity(pdfIntent);VisualizarPedido.super.onBackPressed();}catch(ActivityNotFoundExceptione){finalAlertDialog.Builderb=newAlertDialog.Builder(this);alert=b.setCancelable(false).setPositiveButton("OK",newOnClickListener(){@OverridepublicvoidonClick(DialogInterfacedialog,intwhich){alert.dismiss();VisualizarPedido.super.onBackPressed();}}).setMessage("Nenhum Programa para Visualizar Arquivo em PDF Instalado!").create();alert.show();}catch(Exceptione){Log.e("ERRO",e.getMessage());}}
parece estar funcionando porque ele esta chamando o visualizador pdf do celular, mas fica em branco e se eu for na pasta que foi gravado o pdf ele esta la e abre normalmente e nao esta em branco.
M
Solucao aceita
Matheus_Tavares1
Consegui resolver o problema, minha classe ficou assim:
publicvoidvisualizarPedido(){StringcaminhoPdf=Environment.getExternalStorageDirectory()+"/"+"pedido.pdf";Filepdf=newFile(caminhoPdf);if(Build.VERSION.SDK_INT>=Build.VERSION_CODES.N){pdfURI=FileProvider.getUriForFile(this,getPackageName()+".provider",pdf);}else{pdfURI=Uri.fromFile(pdf);}IntentpdfIntent=newIntent(Intent.ACTION_VIEW);pdfIntent.setData(pdfURI);pdfIntent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);try{startActivity(pdfIntent);VisualizarPedido.super.onBackPressed();}catch(ActivityNotFoundExceptione){finalAlertDialog.Builderb=newAlertDialog.Builder(this);alert=b.setCancelable(false).setPositiveButton("OK",newOnClickListener(){@OverridepublicvoidonClick(DialogInterfacedialog,intwhich){alert.dismiss();VisualizarPedido.super.onBackPressed();}}).setMessage("Nenhum Programa para Visualizar Arquivo em PDF Instalado!").create();alert.show();}catch(Exceptione){Log.e("ERRO",e.getMessage());}}
Precisa adicionar essas linhas dentro de application no manifest:
e criar um xml com o nome de filepaths, e adicionar esse codigo no mesmo: