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 :

Modifier un élément d'une activité, à partir d'une autre activité


Sujet :

Android

  1. #1
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2011
    Messages
    144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2011
    Messages : 144
    Points : 118
    Points
    118
    Par défaut Modifier un élément d'une activité, à partir d'une autre activité
    Bonjour,

    Sous ce titre long se cache en fait une question simple (mais peut-être non réalisable).
    La localisation GPS étant assez longue, j'ai une première activité (nommons là "ActivityOne") qui implémente "LocationListener" afin d'obtenir les positions GPS.

    Cette activité demande donc au GPS d'obtenir la position (requestLocationUpdates), puis lance une tabActivity...
    Les traitements sont effectués via les méthodes redéfinies (onLocationChanged...) dans la première classe (ActivityOne donc).


    Ce que je voudrais, c'est qu'une autre activity (disons ActivityTwo) puisse savoir quand une position GPS est trouvée. J'aimerais en fait simplement mettre un texte "Position trouvé/Recherche en cours/GPS désactivé" selon l'état du gps.
    Il faudrait donc que je puisse effectuer une action sur ActivityTwo dès qu'un lsitenner réagis sur ActivityOne.

    Je ne peux pas transmettre des informations par Bundle car les informations changent dès que le GPS est activé/désactivé ou qu'une position est trouvée, alors que le Bundle n'est transmis qu'une fois.



    Avez-vous une idée ?
    Merci d'avance.

  2. #2
    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
    L'envoi d'un Intent ?

  3. #3
    Membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2012
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2012
    Messages : 43
    Points : 53
    Points
    53
    Par défaut
    J'utiliserai un BroadcastReceiver. Cela permettra à ton ActivityOne d'envoyer un message qui sera reçu par l'ActivityTwo si elle existe.

  4. #4
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2011
    Messages
    144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2011
    Messages : 144
    Points : 118
    Points
    118
    Par défaut
    J'ai regardé la classe BroadcastReceiver, et je ne vois pas comment mon ActivityTwo peut recevoir.

    Je pense voir comment envoyer un message depuis ActivityOne, mais je ne vois pas trop pour le recevoir (en plus, on ne peux pas faire d'héritage-multiple).

  5. #5
    Membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2012
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2012
    Messages : 43
    Points : 53
    Points
    53
    Par défaut
    pour recevoir un message dans une activity il faut utiliser la méthode registerReceiver dans ActivityTwo en instanciant ton BroadcastReceiver :

    http://developer.android.com/referen...adcastReceiver, android.content.IntentFilter)

    Un Objet Activity hérite de ContextWrapper

  6. #6
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2011
    Messages
    144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2011
    Messages : 144
    Points : 118
    Points
    118
    Par défaut
    J'ai tenté ça entre temps (et ça suit ton indication), mais ça ne fonctionne pas.
    Aucune erreur, mais aucun message non plus ^^

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public static final String BROADCAST_GPS = "monappli.broadcast.gps";
    Code Envoi du broadcast (ActivityOne) : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    	Intent broadcast = new Intent(BROADCAST_GPS);
            sendBroadcast(broadcast);

    Code Réception du broadcast (ActivityTwo) : 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
    public class ActivityTwo extends Activity
    {
        private BroadcastReceiver receiver;
     
        public void onCreate(Bundle savedInstanceState) 
        {
            ...
     
            IntentFilter filter = new IntentFilter(Launcher.BROADCAST_GPS);
     
            receiver = new BroadcastReceiver() 
            {        	
                @Override
                public void onReceive(Context context, Intent intent) 
                {
                    Log.e("receive", "c'est reçu !"); 
                }
            };
     
            registerReceiver(receiver, filter);
     
        }

  7. #7
    Membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2012
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2012
    Messages : 43
    Points : 53
    Points
    53
    Par défaut
    Re,

    Je n'ai pas essayé avec un Listener GPS mais ce code ci fonctionne chez moi :

    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
    public class FirstActivity extends Activity {
    	/** Called when the activity is first created. */
    	@Override
    	public void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.main);
     
    		startActivity(new Intent(this, SecondActivity.class));
    		new MyAsyncTask().execute();
    	}
     
    	private class MyAsyncTask extends AsyncTask<Void, Void, Void> {
     
    		@Override
    		protected Void doInBackground(Void... params) {
    			int i = 0;
    			while (i++ < 20) {
    				try {
    					Thread.sleep(2000);
    				} catch (InterruptedException e) {
    					e.printStackTrace();
    				}
    				sendBroadcast(new Intent("com.pouet"));
    				Log.d("BROADCAST", "sent");
    			}
    			return null;
    		}
     
    	}
    }
    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
    public class SecondActivity extends Activity {
     
    	@Override
    	protected void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
     
            registerReceiver(new MyReceiver(), new IntentFilter("com.pouet"));
    	}
     
        public class MyReceiver extends BroadcastReceiver {
     
    		@Override
    		public void onReceive(Context context, Intent intent) {
        		Log.d("BROADCAST", "received");
    		}
     
        }
    }

  8. #8
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2011
    Messages
    144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2011
    Messages : 144
    Points : 118
    Points
    118
    Par défaut
    Je viens de trouver le problème.
    En fait, mon bout de code marche autant que le tiens.
    C'est juste que, si ActivityTwo n'est pas créé (je n'y avais pas fais attention, cette activité étant dans une TabActivity), le broadcast n'est jamais reçu.

    Est-ce qu'on ne peut pas faire une sorte de file d'attente ?

  9. #9
    Membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2012
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2012
    Messages : 43
    Points : 53
    Points
    53
    Par défaut
    Dans ce cas là tu pourrai stocker toutes les informations quelquepart (base de données ?) et quand L'ActivityTwo est créée elle n'a plus qu'à voir ce qu'il y a en base et traiter les données.

    Dans ce cas là plus besoin de Broadcast. Cette solution envoie un message dans la nature et s'il est récupéré tant mieux sinon tant pis.


    D'un autre côté, je me demande aussi si tu as vraiment besoin d'une activité avec ce que tu dis. Peut être qu'un Service (C'est comme une activité sauf que ça n'affiche rien) qui tourne en tâche de fond te conviendrai mieux ?

  10. #10
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2011
    Messages
    144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2011
    Messages : 144
    Points : 118
    Points
    118
    Par défaut
    Pour l'activityTwo, je suis obligé de garder une activity (interaction utilisateur, avec boutons).

    Après, pour l'activityOne, il n'y a effectivement pas besoin d'interactions.
    Lancée au démarrage, cette activité initialise quelques valeurs dans les préférences, lance le requestLocationUpdates sur elle-même, puis démarre une tabActivity.
    Pour terminer, à la fin de l'application, ActivityOne vide une table SQLite et ferme tout.

    Mais je n'ai par contre jamais utiliser ni vu de services, ça pourrait être l'occasion de voir ça si c'est compatible avec ce que je souhaite faire.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 08/03/2010, 16h43
  2. [Batch] Créer une chaine à partir d'une variable et d'une autre chaine
    Par mlle lain dans le forum Scripts/Batch
    Réponses: 1
    Dernier message: 10/11/2009, 17h26
  3. Saisir une image à partir d'une photo ou d'une vidéo
    Par lohengrin56 dans le forum Flash/Flex
    Réponses: 0
    Dernier message: 07/07/2009, 17h17
  4. Réponses: 2
    Dernier message: 05/01/2009, 13h45
  5. Réponses: 5
    Dernier message: 22/05/2008, 15h42

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