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 :

Connaître le statut d'un service


Sujet :

Android

  1. #1
    Membre confirmé Avatar de titou624
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 152
    Par défaut Connaître le statut d'un service
    Bonjour à tous, mon soucis n'est pas très compliqué en soit mais je n'ai pas encore trouvé la solution.

    Pour l'instant j'ai une interface avec deux boutons: start et stop qui permettent respectivement de démarrer et arrêter un service en background.

    Je souhaiterais réaliser ces mêmes actions avec un seul bouton qui change en fonction du statut du service.

    Mon soucis étant que je ne sais pas comment tester si le service est démarré ou pas.

    Y a -t-il un moyen ?

    Merci beaucoup !

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    179
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 179
    Par défaut
    plus de precisions ne ferait pas de mal ainsi qu ' un bout de ton code

    Merci

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 24
    Par défaut
    Salut,

    Je na sais pas si ça va répondre à tes attentes mais tu as une solution qui permet de tester les réglages/fonctions de ton tel.

    ex : Settings.system.BLUETOOTH_ON renvoi 1 si le bluetooth est allumé et 0 sinon...
    Tu peux donc faire afficher tel ou tel bouton en fonction du résultat obtenue.


    Tu as tout les exemple à cette adresse :

    http://developer.android.com/intl/fr...gs.System.html

    Bon courage et bonne continuation !

  4. #4
    Membre confirmé Avatar de titou624
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 152
    Par défaut
    Tout d'abord, merci pour votre intérêt.
    Puisque vous voulez du code, en voici:

    Ceci est mon code actuel:

    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
    50
    51
     
    package com.adexos.android.composants.gui;
     
    import java.io.IOException;
     
    import android.app.Activity;
    import android.content.Intent;
    import android.net.Uri;
    import android.os.Bundle;
    import android.view.View;
    import android.widget.Button;
    import android.widget.ImageButton;
    import android.widget.TextView;
     
    import com.adexos.android.composants.adapter.ServViewAdapter;
    import com.adexos.android.composants.background.BackTestServ;
     
    public class Accueil extends Activity implements View.OnClickListener{
     
        private ImageButton bt_startService;
        private ImageButton bt_stopService;
        private Activity _context;
     
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.entry);
            _context = this;             
     
            bt_startService = (ImageButton)findViewById(R.id.startService);
            bt_startService.setOnClickListener(this);     
     
            bt_stopService = (ImageButton)findViewById(R.id.stopService);
            bt_stopService.setOnClickListener(this);        
     
        }
     
        @Override
        public void onClick(View v) {
     
            if(v == bt_startService){
                Intent intent = new Intent(this,BackTestServ.class);  
                startService(intent);
            }
            if(v == bt_stopService){
                Intent intent = new Intent(this,BackTestServ.class);  
                stopService(intent);
            }
     
        }
     
    }
    Mon but étant de n'avoir qu'un seul bouton pour démarrer et arrêter le service.

    Encore merci !

  5. #5
    Membre confirmé Avatar de titou624
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 152
    Par défaut
    Merci Flow07 mais je m'étais peut être mal expliqué, en fait je veux tester un service que j'aurais démarré moi même au préalable.

    Merci beaucoup quand même.

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 24
    Par défaut
    Tu peux peut être enregistrer une valeur dans une variable globale.

    ex : si le service est lancé variable = 1 sinon variable = 0.

    En fonction tu affiche le bouton que tu veux et tu réinitialise la variable lorsque tu quitte l'appli.

    Mais à mon avis j'ai encore mal compris ce que tu attends... Désolé...

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    179
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 179
    Par défaut
    tu prends 2 images de boutons differents
    selon le contexte sur lequel tu te situe , tu remplace un bouton par un autre avec "setImageResource".

    Pour le test, tu peux tester avec des try( bien que c ' est pas terrible) ou creer un booleen qui changera selon l etat de ton service.

    Teste aussi le cas ou le service est diff de null pour voir ce que ca te renvoie

  8. #8
    Membre confirmé Avatar de titou624
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 152
    Par défaut
    J'ai pensé à cette idée mais en fait il y a un soucis, le service fonctionne en background. Donc sans interface graphique au départ.

    Impossible donc de mémoriser la variable globale...

    Donc l'idée serait vraiment de trouver le moyen de récupérer l'Itent démarré ou alors le cas échéant, géré l'exception...

  9. #9
    Rédacteur
    Avatar de MrDuChnok
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2002
    Messages
    2 112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 112
    Par défaut
    Salut,

    As tu regardé dans l'exemple "APIDemo", tu as un cas sur le "RemoteService".
    Peut être qu'avec ça tu pourras trouver ton bonheur.

  10. #10
    Membre confirmé Avatar de titou624
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 152
    Par défaut
    Merci beaucoup pour ce lien

    Cependant j'ai des petites questions car certains points du codes me perturbes (j'ai commenté les lignes):

    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
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
     
    package com.example.android.apis.app;
     
    // Need the following import to get access to the app resources, since this
    // class is in a sub-package.
    import com.example.android.apis.R;
     
    import android.app.Activity;
    import android.content.ComponentName;
    import android.content.Intent;
    import android.os.Bundle;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.Button;
     
     
    /**
     * <p>Example of explicitly starting and stopping the {@link LocalService}.
     * This demonstrates the implementation of a service that runs in the same
     * process as the rest of the application, which is explicitly started and stopped
     * as desired.</p>
     */
    public class LocalServiceController extends Activity {
        @Override
            protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
     
            setContentView(R.layout.local_service_controller);
     
            // Watch for button clicks.
     
    /* Ici on a bien qu'une seule instance de Button donc aucun 
    autre test ensuite pour différencier start de stop ???*/
            Button button = (Button)findViewById(R.id.start);
            button.setOnClickListener(mStartListener);
            button = (Button)findViewById(R.id.stop);
            button.setOnClickListener(mStopListener);
        }
     
        private OnClickListener mStartListener = new OnClickListener() {
            public void onClick(View v)
            {
                // Make sure the service is started.  It will continue running
                // until someone calls stopService().  The Intent we use to find
                // the service explicitly specifies our service component, because
                // we want it running in our own process and don't want other
                // applications to replace it.
                startService(new Intent(LocalServiceController.this,
                        LocalService.class));
            }
        };
     
        private OnClickListener mStopListener = new OnClickListener() {
            public void onClick(View v)
            {
                // Cancel a previous call to startService().  Note that the
                // service will not actually stop at this point if there are
                // still bound clients.
                stopService(new Intent(LocalServiceController.this,
                        LocalService.class));
            }
        };
    }
    C'est surtout ce bout de code qui me dérange un peu.
    Ici on a bien qu'une seule instance de Button donc je ne comprend pas bien ce qui se passe...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
            Button button = (Button)findViewById(R.id.start);
            button.setOnClickListener(mStartListener);
            button = (Button)findViewById(R.id.stop);
            button.setOnClickListener(mStopListener);

  11. #11
    Membre confirmé Avatar de titou624
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 152
    Par défaut
    Bon j'ai des nouveaux éléments et un nouveau problème .

    J'ai développé une petite fonction me permettant de tester les services étant démarrées sur le téléphone celle-ci utilise l'ActivityManager :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
        public boolean isServiceRunning(ActivityManager am){          
            List<RunningServiceInfo> services = am.getRunningServices(100);        
            for(ActivityManager.RunningServiceInfo rsi:services){
                Log.e("Test de service",rsi.process);
                if(rsi.process.equals("com.adexos.android.composants.background.BackTestServ"))
                    return true;
            }
            return false;
        }
    Seulement, le nom du service est celui de l'appli en cours. En fait je pense que l'ActivityManager ne prend que les processus père.

    Je démarre mon service comme ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Intent intent_start_service = new Intent(this,BackTestServ.class);           startService(intent_start_service);
    Voyez vous un moyen pour le démarrer indépendamment ?

  12. #12
    Rédacteur
    Avatar de MrDuChnok
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2002
    Messages
    2 112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 112
    Par défaut
    Je sais pas si tu connais cet article, mais il est vraiment complet et explique les services de A à Z :
    http://blog.developpez.com/android23...on-de-service/
    Tu trouveras peut être ton bonheur dedans.
    (si je ne me trompe pas, il est possible de déclarer ton service directement dans le manifest de ton application, et éventuellement de le lancer au boot du téléphone)

  13. #13
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    179
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 179
    Par défaut
    oui c ' est possible de le mettre directement dans le manifest
    comme ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    intent-filter> 
                        <action android:name="android.intent.action.BOOT_COMPLETED" /> 
                   </intent-filter>

  14. #14
    Membre confirmé Avatar de titou624
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 152
    Par défaut
    Oki, je pensais que je pouvais me débrouiller autrement mais je vais devoir séparer mes 2 services dans 2 projets différents pour être tranquille...

    Merci beaucoup je vais regarder ça

  15. #15
    Membre confirmé Avatar de titou624
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 152
    Par défaut
    J'ai trouvé la solution dans l'après midi et je la poste ici au cas ou quelqu'un en aurait besoin.
    Voici donc une fonction permettant de vérifier si un service est démarré:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
        public boolean isServiceRunning(ActivityManager am,String nomService){          
            List<RunningServiceInfo> services = am.getRunningServices(100);        
            for(ActivityManager.RunningServiceInfo rsi:services){            
                if(rsi.process.equals(nomService){                
                    return true;
                }
            }
            return false;
        }
    Encore merci pour votre aide.
    Bonne nuit !

  16. #16
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2011
    Messages : 12
    Par défaut
    Bonjour,

    Je déterre ce topic car il m'as un peu sauver la vie donc merci pour la fonction

    J'en profite pour donner une methode simple pour recuperer l'activitymanager

    am = (ActivityManager)getSystemService(Context.ACTIVITY_SERVICE)

    Merci encore et bonsoir

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

Discussions similaires

  1. script recupération du statut d'un service
    Par dousa1 dans le forum Scripts/Batch
    Réponses: 23
    Dernier message: 30/09/2009, 15h13
  2. Réponses: 1
    Dernier message: 11/12/2007, 17h34
  3. probleme de remonter de statut d'un service
    Par balthior dans le forum VBScript
    Réponses: 6
    Dernier message: 18/12/2006, 08h56
  4. Connaitre le statut d'un service
    Par clementv dans le forum Administration système
    Réponses: 8
    Dernier message: 08/06/2006, 08h47
  5. Connaître l'état d'un service
    Par NoisetteProd dans le forum API, COM et SDKs
    Réponses: 5
    Dernier message: 06/08/2003, 17h04

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