FORUMS PROFESSIONNELSWINDEV , WEBDEV et WINDEV Mobile
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