PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV Mobile 2025 → Android - Communication entre 2 applis par une Intention
Android - Communication entre 2 applis par une Intention
Débuté par Nicolas Charpentier, 15 nov. 2021 16:52 - 2 réponses
Membre enregistré
24 messages
Posté le 15 novembre 2021 - 16:52
Bonjour à tous,

J'essaie d'échanger un message entre deux applis en utilisant une Intention, mais je bute sur le code de la classe qui recevra l'intention.
Problème : la plupart des solutions que je trouve ne montrent que le code java, et pas comment ça se boutique côté WM.

Ce que je veux faire est pourtant simple : l'appli-1 envoie un message (une simple chaîne) à l'appli-2, sans attendre de retour.

Voici le code de mon appli-1, dans une procédure globale/java nommée envoiIntention, appelée quand je clique sur un bouton :

public static void envoiIntention(String psMsg)
import android.content.*;
import android.app.*;
import android.net.Uri;
{
Uri monURI = Uri.parse("content:" + psMsg); // J'utilise ACTION_EDIT + mon message (ex : "test")
Intent monIntent = new Intent(Intent.ACTION_EDIT, monURI);
// monIntent.putExtra("data", psMsg); // J'ai vu qu'on pouvait aussi utiliser le Bundle, je n'en ai pas besoin
monIntent.setPackage("com.societe.testRecoitIntent");  // Pour restreindre l'envoi à mon appli-2

getApplicationContext().sendBroadcast(monIntent);
}


Ce code compile, l'appli se génère et il n'y a pas de plantage à l'exécution, mais je ne sais pas si l'intention est vraiment envoyée pour autant.

Voici maintenant le code de mon appli-2, qui reçoit l'intention (son nom de package : com.societe.testRecoitIntent).
Dans une procédure globale/java INTENT_RECEIVER, appelée au démarrage de l'appli. L'idée, si j'ai bien compris, et d'instancier un Receiver statique qui se déclenchera pendant toute la durée de vie de l'appli-2.



Mais là je suis perdu, et je résume la doc Android : il y a deux manières de déclarer une Intention, soit par le manifest, soit par le contexte.
1. Utilisation du manifest :
J'ai préparé un intent-filter à la main, mais je ne sais pas où je dois le mettre, ni s'il est complet :



La plupart des exemples que je trouve (en java natif) proposent de créer une classe qui hérite d'Activity : mais quand j'importe une de ces classes en tant qu'élément externe, les fonctions WL (appelProcedureWL, etc...) ne compilent pas, donc je ne peux rien faire avec mon receiver "externe". Y a-t-il un import dédié aux fonctions WL appelées dans java ?

// Une classe en java importée en externe dans le projet WM
import android.app.*;
import android.os.Bundle;
import android.content.*;
// Que faut-il importer pour pouvoir appeler appelProcedureWL() depuis cette classe externe ?

public class PilotTraceMobile extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {        
// On récupère l'intent qui a lancé cette activité
Intent i = getIntent();
Uri monURI = i.getData();
// on lance la fonction en WL -> *** NE COMPILE PAS
appelProcedureWL("testReception", monURI.getFragment());
}
}


Bref, je ne m'en sors pas avec le manifest.

Donc plan B : on va déclarer dynamiquement le receiver
2. Création du receiver et enregistrement dans le contexte à l'exécution. J'utilise une procédure globale/java, et j'ajoute du code après le corps de la méthode, comme expliqué dans ce post : https://www.wxforum.info/read.php…

public static void INTENT_RECEIVER()
{
IntentFilter filter = new IntentFilter(Intent.ACTION_EDIT);
getApplicationContext().registerReceiver(MonReceiver, filter); //*** MonReceiver INCONNU

}
import android.app.Activity;
import android.app.PendingIntent;
import android.content.*;
import android.net.Uri;
import android.os.*;
import android.widget.Toast;
import android.util.Log;
import android.widget.TextView;
import android.widget.Toast;

public static class MonReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
try {
Uri monURI = intent.getData();
// Une procédure WL qui affichera le message
appelProcedureWL("testReception", monURI.getFragment());
}
catch(Exception e) {
e.printStackTrace();
}
}
}


Je ne comprends pas la portée de ma classe MonReceiver. Elle est ajoutée à la suite de la méthode INTENT_RECEIVER, je ne sais même pas si ça marche (en tout cas ça compile et ça génère). Ici aussi je suis bloqué : comment créer un IntentFilter dynamique en lui passant l'instance statique de MonReceiver ?

Si quelqu'un a déjà manipulé les intentions (surtout leur réception) avec WM, merci d'éclairer ma lanterne.

--
Nicolas
Posté le 31 janvier 2022 - 05:10
Bonjour Nicolas,
As tu trouvé une solution à ton problème ? Si oui, peux tu nous donner la réponse car j'ai le même besoin.
Merci
Sylvain
Membre enregistré
241 messages
Posté le 21 mars 2025 - 15:00
On est en mars 2025 et le besoin est toujours présent, impression c'est vraiment un besoin classique de développement Android
D'ailleurs de nombreux posts en parlent sur ce forum mais **AUCUN** ne propose de solution, c'est fatiguant
Application A et lien partage , on veut que Application B soit dans la listes des options de partage et qu'on puisse faire le traitement associé
A priori y a une piste dans la LST 102 mais
1 -C'est payant
2 - Cette LST date de 2015 donc très certainement déjà obsolète

--
Ce n'est pas l'outil le plus important mais la manière de s'en servir