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 :

Activité qui récupère les variables d'un service


Sujet :

Android

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Géochimiste
    Inscrit en
    Août 2012
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Géochimiste

    Informations forums :
    Inscription : Août 2012
    Messages : 20
    Par défaut Activité qui récupère les variables d'un service
    Bonjour à tous,
    je me prends la tête sur un truc, qui je suis sur est tout bête....

    Je suis en train de développer une application de tracking GPS. j'ai une activité qui permet d'avoir une interface graphique et un Service qui effectuer tous les calculs, sauvegardes de fichiers, localisation GPS, etc :

    ACTIVITE :
    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
     
    public class MainActivity extends Activity implements OnClickListener
    {
     MyService myService;
     @Override
     public void onCreate(Bundle savedInstanceState)
       {
          super.onCreate(savedInstanceState);
          setContentView(R.layout.application);
     
          //Connexion de l'activité au service MyService
          ServiceConnection myServiceConnection = new 
          ServiceConnection()
               {
                   @Override  
                   public void onServiceDisconnected(ComponentName name)
                    { 
                         myService = null;
                    } 
     
                   @Override  
                   public void onServiceConnected(ComponentName name, IBinder service)
                   { 
                         myService = ((MyService.MyActivityBinder)service).getMyService();
                   } 
               }; 
     
            //Démarrage du Service
            Intent serviceIntent = new Intent(this, MyService.class); 
            startService(serviceIntent);
     
            //Listener sur les boutons
            findViewById(R.id.bouton).setOnClickListener(this);
     
            Toast.makeText(MainActivity.this, String.valueOf(myService.VARIABLE), Toast.LENGTH_LONG).show();
       }
     
    //Action sur les boutons
    public void onClick(final View v)
    {
     
    }
    SERVICE :
    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
     
    public class MyService extends Service implements LocationListener
    {
            //Déclaration de la variable à récupérer à partir de l'activité
            public int VARIABLE = 10;
     
    public class MyActivityBinder extends Binder
    	{ 
    	   MyService getMyService()
    	   {  
    	      return MyService.this; 
    	   } 
    	}
     
    	private IBinder myBinder = new MyActivityBinder();
     
    	@Override  
    	public IBinder onBind(Intent intent)
    	{  
    	   return myBinder;
    	}
     
       @Override  
       public void onCreate()
       {  
          super.onCreate();
       }
     
       @Override  
     	public int onStartCommand(Intent intent, int flags, int startId) 
     	{  
     	   return START_REDELIVER_INTENT;
     	}
    }
    MANIFEST :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    //entre les balises application qui contient l'activité
    <service android:name=".MyService"/>

    Mon but est de pouvoir récupérer la valeur de la variable VARIABLE qui se trouve dans la class MyService, à partir de l'activité et plus particulièrement à partir de la méthode onCreate.

    Pour cela, dans l'exemple, j'ai mis un Toast dans onCreate de mon activité, qui me renvoie cette valeur.

    Mon problème c'est que l'appli plante et je pense savoir pourquoi, mais je ne sais pas comment faire pour résoudre ce problème.

    Hypothèse : Lors du lancement de l'application, l'activité est instanciée avant le service, ce qui fait planter l'appli car il n'y a pas encore d'espace alloué à cette variable (elle n'existe pas encore).
    Pourquoi je suppose ça ? et bien parce que lorsque je mets mon toast dans la méthode onClick. Lorsque je lance l'application et que je clic sur le bouton, cela me renvoie bien la valeur de VARIABLE (à savoir 10).

    J'ai aussi essayé de récupérer la valeur de myService dans un toast et cela me renvoi null lorsque le toast est dans onCreate et une série de caractères lorsque le toast est dans onClick. Par conséquent, le service n'est effectivement pas connecté (ou instancié) lors de l'exécution de onCreate de mon activité.

    COMMENT FAIRE POUR RÉSOUDRE ÇA ???

    Merci d'avance.

  2. #2
    Expert confirmé

    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
    Billets dans le blog
    3
    Par défaut
    Le service n'est disponible qu'entre les appels de onServiceConnected et onServiceDisconnected

    Donc il faut attendre ces évènements pour pouvoir faire quelque-chose...

  3. #3
    Membre averti
    Homme Profil pro
    Géochimiste
    Inscrit en
    Août 2012
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Géochimiste

    Informations forums :
    Inscription : Août 2012
    Messages : 20
    Par défaut
    Le service n'est disponible qu'entre les appels de onServiceConnected et onServiceDisconnected

    Donc il faut attendre ces événements pour pouvoir faire quelque-chose.
    Merci pour ta réponse, mais malheureusement non car le toast se trouve bien après le lancement du service et pourtant les variables sont inaccessibles.....Les variables sont accessibles seulement lorsque tout est instancié......

    Je suis en train de chercher comment lancer le service en priorité.....

    Si quelqu'un a d'autres suggestions, je suis preneur....

  4. #4
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 693
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 693
    Par défaut
    Citation Envoyé par wataiso Voir le message
    Merci pour ta réponse, mais malheureusement non car le toast se trouve bien après le lancement du service et pourtant les variables sont inaccessibles
    Ton Toast est après dans le code , mais c'est pas certains que onServiceConnected ai été appelé au moment ou tu lances ton toast.

    Pour être sur , fait des traces (Log.d(TAG,"message")) à chaque endroit clé, pour voir l'odre exact d'éxécution
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre averti
    Homme Profil pro
    Géochimiste
    Inscrit en
    Août 2012
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Géochimiste

    Informations forums :
    Inscription : Août 2012
    Messages : 20
    Par défaut
    Oui tu as raison.......Merci

    J'ai trouvé un moyen de contourner le problème.....
    Si ça intéresse quelqu'un :

    Je mets un thread dans le onCreate de mon activité qui récupère les variables uniquement lorsque myService est différent de null.
    En gros on attend l'ouverture du service avant d'y piocher les variables.....ça fonctionne mais je ne sais pas si c'est très propre....

    Encore merci pour ton temps....
    @+

  6. #6
    Expert confirmé

    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
    Billets dans le blog
    3
    Par défaut
    Je ne vois pas l’intérêt d'un thread, puisque l'activité est appelée quand le service est disponible (onServiceConnected) !

    Et le thread il attend quoi comme évènement ?

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

Discussions similaires

  1. Macro qui récupère les contrôles d'une page
    Par nitrous007 dans le forum ASP.NET
    Réponses: 15
    Dernier message: 22/05/2007, 10h46
  2. Réponses: 2
    Dernier message: 31/05/2006, 09h58
  3. Requête qui récupère les droits d'un utilisateur
    Par peck dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 20/04/2006, 09h40
  4. Construire un formulaire qui ecrase les variables hidden
    Par Battosaiii dans le forum Servlets/JSP
    Réponses: 7
    Dernier message: 14/04/2006, 11h58
  5. [VS2005]Destructeur qui remet les variables à 0
    Par NicolasJolet dans le forum MFC
    Réponses: 8
    Dernier message: 27/03/2006, 13h50

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