PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV Mobile 2025 → Récupération partage depuis une autre application
Récupération partage depuis une autre application
Débuté par erbl, 21 mar. 2025 17:15 - 3 réponses
Membre enregistré
242 messages
Posté le 21 mars 2025 - 17:15
Bonjour tout le monde

J'ai un besoin en théorie très simple :

Une application tierce produit un fichier zip que je dois pouvoir traiter dans mon application

J'ai écumé les forums et vu quelques sujets similaires exemple https://forum.pcsoft.fr/fr-FR/pcsoft.fr.windevmobile/44675-android-communication-entre-2-applis-par-intention/read.awp mais jamais de véritable solution complète clé en mainset pas mal de sujets sont super vieux (on mentionne une LST d 2015, très certainement obsolète depuis)

J'ai commencé à entrevoir une piste et je me lance dans l'implémentation, je crée ce post en + pour avoir vos eventuels conseils mais surtout quand j'aurai réussi à faire ça , que la solution soit présente sur le forum pour tout le monde

--
Ce n'est pas l'outil le plus important mais la manière de s'en servir
Membre enregistré
242 messages
Posté le 21 mars 2025 - 17:26
Étape numéro 1 : Indiquer que notre application peut recevoir un partage

C'est la partie la + facile mais malgré tout, faut il encore le savoir donc je vous la remets ici :

Génération de l'application Android > Suivant jusqu'à Configuration avancée > Éditer le manifeste

Là il faut ajouter un noeud <intent-filter> en dessous de celui existant dans <activity>

<intent-filter>
<action android:name=android.Intent.action.SEND />
<category android:name=android.Intent.category.DEFAULT />
<data android:mimeType=application/zip />
</intent-filter>


Dans type mime j'ai mis zip pour mon besoin mais on peut très bien en choisir d'autres, la liste complète est ci dessous :

https://www.iana.org/assignments/media-types/media-types.xhtml

Lorsque c'est fait, compilé et déployé sur le device, n'importe quelle application avec partage du fichier zip, mon application est dans la liste des options, il me reste à gérer la reception puis traitement du côté de mon application mais ça fera l'objet d'une autre réponse plus tard

--
Ce n'est pas l'outil le plus important mais la manière de s'en servir
Membre enregistré
242 messages
Posté le 26 mars 2025 - 15:28
Étape numéro 2 : recevoir le fichier zip

2.1 : Méthode java qui va récupérer l'intent et le traiter
import android.content.Intent;
import android.net.Uri;
import android.app.Activity;
import android.widget.Toast;
import java.io.File;
import android.os.Bundle;

public static Uri getZip()
{
Toast.makeText(getActiviteEnCours(), "Appli ouverte",Toast.LENGTH_LONG).show();
Intent intent = getActiviteEnCours().getIntent();
if( intent!=null){
Bundle bundle = intent.getExtras();
if( bundle != null){
Uri uri = (Uri)bundle.get(Intent.EXTRA_STREAM);
if(uri!=null){
Toast.makeText(getActiviteEnCours(), "Zip reçu",Toast.LENGTH_LONG).show();
return uri;
}
}
}
return null;
}

J'ai un avertissement Type de retour non valide mais ça semble être une bizarrerie WINDEV Mobile, le code java est correct et ça fonctionne.

2.2 Code à l'initialisation du projet qui appelle la méthode java et fait un traitement WINDEV (ici j'enregistre le fichier zip)

gsUri est une URI = getZip()
SI gsUri <>Null ALORS
sRepetoire est une chaîne = "Chemin sur le disque"
SI PAS ErreurDétectée ALORS
// Enregistre la ressource dans le répertoire de l'application
URIVersFichier(gsUri , sRepetoire+"MonFichier.zip", ProcEnregistre,"application/zip")
PROCEDURE INTERNE ProcEnregistre(bResultat, sChemin)
SI bResultat ALORS
ToastAffiche("Enregistrement terminé "+sChemin)
SINON
ToastAffiche("Échec de l'enregistrement")
SI PAS EnModeArrièrePlan() ALORS
Erreur(ErreurInfo())
FIN
FIN
FIN
FIN
FIN


--
Ce n'est pas l'outil le plus important mais la manière de s'en servir
Membre enregistré
20 messages
Posté le 14 avril 2025 - 15:15
Bonjour,

Tout d'abord, un grand merci pour ton poste. J'avais déjà cherché par le passé, mais sans trouver de solution véritable. De plus, la moindre petite erreur peut tout bloquer.

J'ajoute cette information pour les futurs lecteurs :

Option d'accepter tous types de fichiers
Pour accepter tous les types de fichiers, il faut modifier le manifest comme suit :
<data android:mimeType=application/zip/>
-->
<data android:mimeType=*/*/>

Cependant, il faudra également modifier le code initial pour prendre en compte cette modification :

gsUriTypeMime est une chaîne = URIRécupèreInfo(gsUri,uriInfoTypeConversion)
gsNomUri est une chaîne = URIRécupèreInfo(gsUri,uriInfoNom)
URIVersFichier(gsUri,sRepetoireURI+gsNomUri+ExtraitChaîne(gsUriTypeMime,2,TAB),ProcEnregistre,ExtraitChaîne(gsUriTypeMime,1,TAB))


Pour le moment, il n'est possible d'envoyer qu'un fichier à la fois, ce qui peut être peu pratique dans certains cas. J'ai découvert qu'en modifiant le manifest de cette manière, il est possible d'ajouter plusieurs fichiers :

android.intent.action.SEND_MULTIPLE


Malheureusement, le code Java actuel ne supporte pas cette fonctionnalité. Je continue à chercher une solution pour y parvenir.

N'hésitez pas à partager vos propres découvertes ou solutions sur ce sujet !

--
Bon dev