Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Desarrollo en Delphi para Android
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos


Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 31-01-2019
Avatar de turbopascual5.0
turbopascual5.0 turbopascual5.0 is offline
Miembro
 
Registrado: feb 2011
Posts: 54
Poder: 14
turbopascual5.0 Va por buen camino
Abrir Pdf En Api 26

Hola.

Al compilar para api 26 en Rio, al abrir un pdf obtengo este error que antes no aparecía

android.os.FileUriExposedException: file:///Storage/emulated/0/Download/AppDataDetails/trabajo.pdf exposed beyond app through Intent.getData()

El código es

Código Delphi [-]
     URI := TJnet_Uri.JavaClass.parse(StringToJString('file:///' + ficheropuente));
      intent := TJIntent.Create;
      intent.setAction(TJIntent.JavaClass.ACTION_VIEW);
      intent.setDataAndType(URI,StringToJString('application/pdf'));
      Tandroidhelper.Activity.startActivity(intent);[/font][/color]

Buscando he encontrado una solución


You'll need this unit:
https://github.com/DelphiWorlds/Kast...leProvider.pas
for this code:

uses Androidapi.JNI.JavaTypes, Androidapi.JNI.Net, Androidapi.JNI.GraphicsContentViewText, Androidapi.Helpers;procedure OpenPDF(const AFileName: string);var LIntent: JIntent; LAuthority: JString; LUri: Jnet_Uri;begin LAuthority := StringToJString(JStringToString(TAndroidHelper.Context.getApplicationContext.getPackageName)+'.fileprovider'); LUri := TJFileProvider.JavaClass.getUriForFile(TAndroidHelper.Context, LAuthority, TJFile.JavaClass.init(StringToJString(AFileName))); LIntent := TJIntent.JavaClass.init(TJIntent.JavaClass.ACTION_VIEW); LIntent.setDataAndType(LUri, StringToJString('application/pdf')); LIntent.setFlags(TJIntent.JavaClass.FLAG_GRANT_READ_URI_PERMISSION); TAndroidHelper.Activity.startActivity(LIntent);end;




Pero ahora me da error

java.lang.illegalArgumentsException Failed to find configured root that contains /file: /data/user/0/com.embarcadero.PRODUCCION/files/trabajo.pdf

El pdf lo leo de una base de datos y lo grabo así:

Código Delphi [-]
ficheropuente:=TPath.Combine(TPath.GetPublicPath, 'trabajo.pdf');
TBlobField(uniquery2documento).SaveToFile(ficheropuente);

Alguna idea?, gracias de antemano





Última edición por Neftali [Germán.Estévez] fecha: 31-01-2019 a las 09:23:00. Razón: Añadir TAG's al código
Responder Con Cita
  #2  
Antiguo 31-01-2019
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is online now
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.021
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Para que el lector de pdf pueda abrir el fichero tienes que ponerlo en un directorio compartido, no vale tenerlo en el directorio de tu programa.
Y lo mismo es para cualquier otra cosa similar, como ver fotos con otro programa que no sea el tuyo, etc.
Responder Con Cita
  #3  
Antiguo 31-01-2019
Avatar de turbopascual5.0
turbopascual5.0 turbopascual5.0 is offline
Miembro
 
Registrado: feb 2011
Posts: 54
Poder: 14
turbopascual5.0 Va por buen camino
Cita:
Empezado por Casimiro Notevi Ver Mensaje
Para que el lector de pdf pueda abrir el fichero tienes que ponerlo en un directorio compartido, no vale tenerlo en el directorio de tu programa.
Y lo mismo es para cualquier otra cosa similar, como ver fotos con otro programa que no sea el tuyo, etc.
Gracias,

y cual seria un path adecuado?, es que he probado con

Código Delphi [-]
     ficheropdf:=TPath.GetDocumentsPath + PathDelim + 'trabajo.pdf';
     ficheropdf:=TPath.GetSharedDownloadsPath + PathDelim + 'trabajo.pdf';



Y sigo teniendo el error

Última edición por Neftali [Germán.Estévez] fecha: 31-01-2019 a las 09:20:03. Razón: Añadir TAG's al código.
Responder Con Cita
  #4  
Antiguo 31-01-2019
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.233
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por turbopascual5.0 Ver Mensaje
y cual seria un path adecuado?, es que he probado conCódigo Delphi [-] ficheropdf:=TPath.GetDocumentsPath + PathDelim + 'trabajo.pdf'; ficheropdf:=TPath.GetSharedDownloadsPath + PathDelim + 'trabajo.pdf';

Por favor, recuerda añadir TAG's al mensaje cuando utilices código Delphi.

No se si tiene que ver con el error que te da en este último código, pero es reciomentable que utilices TPath.Combine cuando accedas al fichero,igualque lo has utilizado para grabarlo.
Revisa este llink de Javier Pareja sobre este tema, a ver si te aporta algo de información.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #5  
Antiguo 31-01-2019
Avatar de turbopascual5.0
turbopascual5.0 turbopascual5.0 is offline
Miembro
 
Registrado: feb 2011
Posts: 54
Poder: 14
turbopascual5.0 Va por buen camino
Solucionado!

Gracias Germán.
Accediendo como comentas funciona perfectamente, y en base a eso me he dado cuenta que tenía un error
Código Delphi [-]
OpenPDF('file:///' + ficheropuente);

y debia ser:
Código Delphi [-]
OpenPDF(ficheropuente);

Así no encontraba el path.... Al menos ahí queda el aporte, el código que encontré en stackoverflow funciona a la perfección.
Sorry por los tags

Gracias por vuestro tiempo.

Última edición por Neftali [Germán.Estévez] fecha: 31-01-2019 a las 09:59:20. Razón: Los TAG's.....
Responder Con Cita
  #6  
Antiguo 07-07-2020
xtenia22 xtenia22 is offline
Registrado
 
Registrado: jul 2020
Posts: 1
Poder: 0
xtenia22 Va por buen camino
Consulta

Disculpa, podrias compartir el proyecto?. Estoy tratando de hacer lo mismo y no logro tener exito. Saludos
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
abrir pdf yossi Varios 3 07-07-2010 04:26:27
Abrir un URL Willo Varios 1 26-11-2008 19:11:54
abrir una dll. REHome .NET 2 30-08-2007 17:55:28
Abrir HTML con IE CarmaZone Varios 1 07-06-2005 23:31:34
Abrir un archivo PDF mamen .NET 4 30-03-2005 13:32:49


La franja horaria es GMT +2. Ahora son las 11:09:00.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi