IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Android Discussion :

Partager un Objet entre un BroadcastReceiver et une Activity ?


Sujet :

Android

  1. #1
    Membre habitué
    Homme Profil pro
    Etudiant
    Inscrit en
    Février 2010
    Messages
    115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Etudiant

    Informations forums :
    Inscription : Février 2010
    Messages : 115
    Points : 139
    Points
    139
    Par défaut Partager un Objet entre un BroadcastReceiver et une Activity ?
    Bonjour,

    Je suis actuellement sur un programe dont l'UI devrait normalement s'actualiser a la réception d'un SMS.
    Le problème c'est que j'aimerai pouvoir faire un truc "java" du style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    public class SMSReceiver extends BroadcastReceiver
    {
    	public SMSReceiver (MonObjet obj)
    	{
    		this.obj= obj;
    	}
     
                public void onReceive(Context context, Intent intent){
                ............
                obj.methode(texteSms);
               }
    }
    Malheureusement je n'y arrive pas, et le BroadcastReceiver n'accepte qu'un constructeur sans paramètre.
    Es-ce possible à faire, sinon comment pourrais-je feinter pour y arriver quand même ? (et dsl pour l'indentation pourrie, j'ai encore du mal avec les copier-coller de bout de code )

    Merci d'avance

  2. #2
    Expert éminent

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Points : 7 618
    Points
    7 618
    Billets dans le blog
    3
    Par défaut
    Je ne vois pas de problème dans le code que tu as posté ????

    Qu'est ce qui te bloque ?
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Avril 2012
    Messages
    168
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 168
    Points : 212
    Points
    212
    Par défaut
    Indentation sous Eclipse :

    Ctrl+a Ctrl+i

    Pour passer des paramètres, tu peux créer des objets statiques

  4. #4
    Expert éminent

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Points : 7 618
    Points
    7 618
    Billets dans le blog
    3
    Par défaut
    Ca y'est je crois que j'ai compris la question....

    Je pense qu'il y a un problème de conception, parce que normalement tu n'as pas besoin de faire cela...

    Si tu veux vraiment faire comme cela, voici un exemple d'implémentation:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
     
    class MyReceiver extends BroadcastReceiver
    {
          public static interface Listener
          {
                public void doSomething(...);
          }
     
          static WeakReference<MyReceiver> _instance = null;
     
          public MyReceiver() {
              super();
              _instance = new WeakReference<MyReceiver>(this);
          }
     
          public static synchronized MyReceiver getInstance()
          {
             MyReceiver ret = (_instance == null) ? null : _instance.get();
             return ret;
          }
     
          HashSet<Listener>  listeners = new HashSet<Listener>();
     
          public static void register(Listener l)
          {
              MyReceiver rec = getInstance();
              if (rec != null) {
                  syncrhonized (rec) {
                      rec.listeners.put(l);
                  }
              }
          }
     
          public static void unregister(Listener l)
          {
              MyReceiver rec = getInstance();
              if (rec != null) {
                  syncrhonized (rec) {
                      rec.listeners.remove(l);
                  }
              }
          }
     
          public void onReceive(....)
          {
               for (Listener l : this.listeners) 
                  l.doSomething();
          }
    }
    Mais bon, c'est encore une fois un peu tiré par les cheveux...
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  5. #5
    Expert confirmé
    Avatar de Hephaistos007
    Profil pro
    Enseignant Chercheur
    Inscrit en
    Décembre 2004
    Messages
    2 493
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 493
    Points : 4 166
    Points
    4 166
    Par défaut
    Citation Envoyé par nicroman Voir le message
    Ca y'est je crois que j'ai compris la question....

    Je pense qu'il y a un problème de conception, parce que normalement tu n'as pas besoin de faire cela...

    Si tu veux vraiment faire comme cela, voici un exemple d'implémentation:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
     
    class MyReceiver extends BroadcastReceiver
    {
          public static interface Listener
          {
                public void doSomething(...);
          }
     
          static WeakReference<MyReceiver> _instance = null;
     
          public MyReceiver() {
              super();
              _instance = new WeakReference<MyReceiver>(this);
          }
     
          public static synchronized MyReceiver getInstance()
          {
             MyReceiver ret = (_instance == null) ? null : _instance.get();
             return ret;
          }
     
          HashSet<Listener>  listeners = new HashSet<Listener>();
     
          public static void register(Listener l)
          {
              MyReceiver rec = getInstance();
              if (rec != null) {
                  syncrhonized (rec) {
                      rec.listeners.put(l);
                  }
              }
          }
     
          public static void unregister(Listener l)
          {
              MyReceiver rec = getInstance();
              if (rec != null) {
                  syncrhonized (rec) {
                      rec.listeners.remove(l);
                  }
              }
          }
     
          public void onReceive(....)
          {
               for (Listener l : this.listeners) 
                  l.doSomething();
          }
    }
    Mais bon, c'est encore une fois un peu tiré par les cheveux...
    Ta solution impose d'enregistrer programmatiquement le receiver pour y coller les instructions supplémentaires, c'est bien cela ?
    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    MyReceiver joliRecepteur = MyReceiver.getInstance();
    joliRecepteur.register(new MyReceiver.Listener() { public void doSomething() { /*code ici*/ } };);
    context.registerReceiver(joliRecepteur, new IntentFilter(...));
    Il vaut mieux mobiliser son intelligence sur des conneries que mobiliser sa connerie sur des choses intelligentes --- devise SHADOKS

    Kit de survie Android : mon guide pour apprendre à programmer sur Android, mon tutoriel sur les web services et enfin l'outil en ligne pour vous faire gagner du temps - N'oubliez pas de consulter la FAQ Android

  6. #6
    Expert éminent

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Points : 7 618
    Points
    7 618
    Billets dans le blog
    3
    Par défaut
    Oui...

    Le plus compliqué est bien concevoir l'architecture des objets...
    Si le receiver contient un objet, il est "maître" de cet objet (car conceptuellement, le receiver peut être le seul à tourner).

    Donc, de deux choses l'une:
    * Ou le receiver manage l'objet (qu'il peut donc utiliser comme il l'entend), voir le partager à d'autres (une fonction getObject() du receiver).
    * Ou l'objet est indépendant et il y a deux solutions:
    - Un seul objet possible (donc une fonction statique "set...." dans le receiver)
    - Plusieurs objets possibles (donc une fonction statique "register..." dans le receiver)
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

Discussions similaires

  1. partager un objet entre une servlet et une jsp
    Par thierry_b dans le forum Servlets/JSP
    Réponses: 4
    Dernier message: 05/11/2009, 23h48
  2. Partage d'objet entre objet
    Par oxor3 dans le forum CORBA
    Réponses: 1
    Dernier message: 08/09/2006, 22h00
  3. [WinForms]Comment partager des objets entre threads ?
    Par AiSpirit dans le forum Général Dotnet
    Réponses: 3
    Dernier message: 16/08/2006, 08h57
  4. [javaBean + JSP] comment partager un objet entre les page JSP
    Par subzero82 dans le forum Servlets/JSP
    Réponses: 4
    Dernier message: 31/05/2006, 18h48

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo