Bonjour,
J'aimerais avoir quelques conseils avisés pour ouvrir un document PDF depuis mon application (Android et iOS).
Je m'explique :- mon application permet de parcourir des répertoires de la mémoire du téléphone (je fais les demandes d'autorisations et ça passe tout seul !)
- pour chaque répertoire, je liste les fichiers qu'il contient (des images et des PDF)
- et j'aimerais ouvrir les fichiers PDF par le biais de mon application
Mais je n'arrive pas à m'en sortir avec l'utilisation des JIntent et des JActivity. J'ai trouvé le code suivant :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
|
var
&OriginalFile, PublicDirectoryFile, PublicFile: JFile;
PublicDirectoryPath, PublicPath: string;
Uri: Jnet_Uri;
Intent: JIntent;
begin
inherited;
if Path.StartsWith(System.IOUtils.TPath.GetDocumentsPath()) then begin
&OriginalFile := TJFile.JavaClass.init(StringToJString(Path));
PublicDirectoryPath := (JStringToString(TJEnvironment.JavaClass.getExternalStorageDirectory.getAbsolutePath) + '/Documents');
PublicPath := PublicDirectoryPath + PathDelim + ExtractFileName(Path);
PublicDirectoryFile := TJFile.JavaClass.init(StringToJString(PublicDirectoryPath));
if (not PublicDirectoryFile.exists) then begin
PublicDirectoryFile.mkdir;
end;
if (not FileExists(PublicPath)) then
TFile.Copy(JStringToString(&OriginalFile.getAbsolutePath), PublicPath);
PublicFile := TJFile.JavaClass.init(StringToJString(PublicPath));
end
else begin
PublicFile := TJFile.JavaClass.init(StringToJString(Path));
end;
Intent := TJIntent.JavaClass.init(TJIntent.JavaClass.ACTION_VIEW);
Uri := TJnet_Uri.JavaClass.fromFile(PublicFile);
// Intent.setDataAndType(Uri, StringToJString('application/pdf'));
Intent.setDataAndType(Uri, self.GetMimeType(Uri));
Intent.addFlags(TJIntent.JavaClass.FLAG_ACTIVITY_NO_HISTORY);
TAndroidHelper.Activity.startActivity(Intent);
end; |
Mais j'ai le message d'erreur :
android.os.FileUriExposedException: file:///storage/emulated/o/Documents/xxx.pdf exposed beyond app through Intent.getData()
et là, je sèche !
Partager