PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV Mobile 2024 → Sélectionner une image ou fichier pdf
Sélectionner une image ou fichier pdf
Débuté par Stéphane, 29 mar. 2024 16:59 - 3 réponses
Posté le 29 mars 2024 - 16:59
Bonjour,

Je cherche à sélectionner une image ou un fichier pdf depuis le smartphone avec androïd avec le code ci-dessous.
le but étant de l'envoyer par Webservices. En test simulation avec WDM 2024, celà fonctionne, mais pas en réel avec un téléphone.
Malheureusement les variables :
NomFichier_1 n'affiche pas le nom du fichier sélectionné avec son extension
FichierEncoder_1, je suppose qu'il ne trouve pas pour encoder en base64.
Pouvez-vous me dire ce qui ne va pas dans le code ou me donner un conseil.

Merci infiniment.

<Compile SI Configuration = "Application Android">
// PARAMETRE DE SELECTION 1
SI OuiNon(1, "Voulez-vous joindre un document ?") = Non ALORS
NomFichier_1 = ""
FichierVersEcran()
SINON
FichierSelectionner_1 est un URI = URISélecteur(uriImage + TAB + "application/pdf")
SI PAS ErreurDétectée ALORS
SI FichierSelectionner_1 <> "" ALORS
NomFichier_1 = fExtraitChemin(FichierSelectionner_1, fFichier + fExtension)
FichierEncoder_1 = Encode(fChargeBuffer(fExtraitChemin(FichierSelectionner_1, fFichier + fExtension)), encodeBASE64)
SINON
NomFichier_1 = ""
FIN
FichierVersEcran()
FIN
FIN
<FIN>
Membre enregistré
3 347 messages
Popularité : +93 (137 votes)
Posté le 29 mars 2024 - 22:16
Salut
Avec uriselecteur c'est la fonction URIRécupèreInfo qu'il faut utiliser
Sinon j'avais fait un exemple de sélecteur de fichiers sous Android
Avant les fonctions uri
https://depot.pcsoft.fr/resource.awp…
Posté le 01 avril 2024 - 07:09
Bonjour Popoy,
Merci pour votre contribution.
A ma connaissance, la fonction URIRécupèreInfo ne permet pas de récupérer le chemin complet et exacte de l'image sur le téléphone, ainsi que son extension.
Voici la trace de URISélecteur : content://com.android.providers.media.documents/document/image%3A0000011309
Alors que mon image se trouve dans /Stockage interne/DCIM/Camera/20240101_132816.jpg
Merci
Posté le 04 avril 2024 - 08:39
Bonjour à tous,
Après avoir fait des recherches, il semblerait que la sécurité a été augmentée depuis android 11, qui ne permet plus d'avoir le chemin complet du fichier non propriétaire.
L'astuce est donc de copier le fichier sélectionné dans l'appli et/ou de le supprimer après (sauf si on veut le conserver).
Après il ne reste plus qu'à le faire transiter par le webservice en Json pour le récupérer du côté WD.
Je public le code pour faire profiter à d'autre.

<Compile SI Configuration = "Application Android">
// PARAMETRE DE SELECTION 1
SI OuiNon(1, "Voulez-vous joindre un document ?") = Non ALORS
NomFichier_1 = ""
SINON
FichierSelectionner_1 est un URI = URISélecteur(uriImage + TAB + "application/pdf")
SI PAS ErreurDétectée ALORS
SI FichierSelectionner_1 <> "" ALORS
SELON Droite(URIRécupèreInfo(FichierSelectionner_1, uriInfoTypeConversion),3)
CAS = "jpg", "JPG", "png", "PNG"
URIVersFichier(FichierSelectionner_1, SysRepStockageExterne(1, sseAppPhoto), ProcFinEnregistre_img)
PROCEDURE INTERNE ProcFinEnregistre_img(bResultat, sCheminRessource)
SI bResultat ALORS
NomFichier_1 = fExtraitChemin(sCheminRessource, fFichier + fExtension)
FichierEncoder_1 = Encode(fChargeBuffer(fExtraitChemin(sCheminRessource, fRépertoire + fFichier + fExtension)), encodeBASE64)
fSupprime(fExtraitChemin(sCheminRessource, fRépertoire + fFichier + fExtension))
FIN
FIN
CAS = "pdf", "PDF"
URIVersFichier(FichierSelectionner_1, SysRepStockageExterne(1, sseAppDocument), ProcFinEnregistre_doc)
PROCEDURE INTERNE ProcFinEnregistre_doc(bResultat, sCheminRessource)
SI bResultat ALORS
NomFichier_1 = fExtraitChemin(sCheminRessource, fFichier + fExtension)
FichierEncoder_1 = Encode(fChargeBuffer(fExtraitChemin(sCheminRessource, fRépertoire + fFichier + fExtension)), encodeBASE64)
fSupprime(fExtraitChemin(sCheminRessource, fRépertoire + fFichier + fExtension))
FIN
FIN
AUTRE CAS
FIN
SINON
NomFichier_1 = ""
FIN
FIN
FIN
<FIN>