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

API standards et tierces Android Discussion :

Comment savoir si un serveur bluetooth n'est plus connecté


Sujet :

API standards et tierces Android

  1. #1
    Membre éprouvé
    Avatar de ChPr
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    2 022
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 78
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 022
    Points : 1 049
    Points
    1 049
    Par défaut Comment savoir si un serveur bluetooth n'est plus connecté
    Bonsoir à toutes et à tous,

    J'essaie de faire une application bluetooth client/serveur pour échanger du texte.

    Chacune des deux parties fonctionne, mais à un détail près : je n'arrive pas à reconnecter le serveur car je ne sais pas détecter s'il a été déconnecté.

    A titre d'exemple, je possède un petit GPS Bluetooth. Je l'utilise avec la partie client de mon application. Quand je connecte mon appli, je reçois les phrases NMEA de mon GPS. Quand je déconnecte mon appli, je ne reçois plus rien du GPS. Lorsque je me reconnecte au GPS, je recommence à avoir les phrases NMEA.

    Maintenant, si je fais la même chose avec mon appli serveur, quand je connecte le client, je peux échanger des données dans les deux sens avec le serveur. Quand je déconnecte le client, je ne peux plus rien échanger : normal. Le problème est que lorsque je reconnecte le client, le serveur ne répond pas ; et pour cause, il n'a pas vu que le client était déconnecté et il toute toujours dans sa boucle while(true) dans son Thread.

    D'où ma question : comment faire pour que le serveur voit (comme l'a fait mon GPS) que le client n'est plus connecté. Autrement dit comment le faire sortir de sa boucle sur détection de connexion interrompue avec le client.

    J'espère avoir été clair.

    Merci de votre aide.

    Pierre

  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
    Selon le modèle OSI, c'est au protocole de transport d'indiquer que la communication est interrompue.
    Le protocole de transport le sachant de puis la couche réseau... etc....
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  3. #3
    Membre éprouvé
    Avatar de ChPr
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    2 022
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 78
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 022
    Points : 1 049
    Points
    1 049
    Par défaut
    Citation Envoyé par nicroman Voir le message
    Selon le modèle OSI, c'est au protocole de transport d'indiquer que la communication est interrompue.
    Le protocole de transport le sachant de puis la couche réseau... etc....
    Après avoir exploré, au niveau des méthodes BlueTooth, beaucoup de solutions potentielles et qui se sont toutes avérées inefficaces j'en ai conclue qu'il fallait effectivement chercher à une couche inférieure. Pour autant, je ne sais pas comment faire.

    As-tu une piste ?

    Cordialement.

    Pierre

  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
    Pour le bas niveau ... non....

    Mais je sais que Android broadcast un tas d'Intent en fonction des connections diverses et variées.

    En particulier (un simple search dans la doc android m'a fournit cela comme résultat premier): http://developer.android.com/referen...L_DISCONNECTED
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  5. #5
    Membre éprouvé
    Avatar de ChPr
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    2 022
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 78
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 022
    Points : 1 049
    Points
    1 049
    Par défaut
    Bon ben ça va pas être immédiat car j'ai l'impression qu'il faut que j'utilise "les services". Choses que je n'ai jamais étudiée. Va y avoir des questions.

    Cordialement.

    Pierre

  6. #6
    Membre éprouvé
    Avatar de ChPr
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    2 022
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 78
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 022
    Points : 1 049
    Points
    1 049
    Par défaut
    Bon, finalement, j'ai appris à me servir (à minima) des services, mais dans mon cas, je n'en ai pas besoin.

    J'ai recherché des exemples de gestion de broadcast et j'ai trouvé celui-ci, qui m'a apporté la solution.

    Finalement, je n'ai eu qu'à ajouter la partie suivante dans mon application pour détecter les connexions/déconnexions du bluetooth :
    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
     
            IntentFilter filter = new IntentFilter();
            filter.addAction(BluetoothDevice.ACTION_ACL_CONNECTED);
            filter.addAction(BluetoothDevice.ACTION_ACL_DISCONNECTED);
     
            mBroadcastReceiver = new BroadcastReceiver() {
     
                @Override
                public void onReceive(Context context, Intent intent) {
                    String action = intent.getAction();
                    Toast.makeText(context, "faire ce que je souhaite"+action, Toast.LENGTH_SHORT).show();
     /*                switch (action) {
                        case BluetoothDevice.ACTION_ACL_CONNECTED:
                            break;
                        case BluetoothDevice.ACTION_ACL_DISCONNECTED:
                            break;
                    }*/
               }
            };
            registerReceiver(mBroadcastReceiver, filter);
        }
    plus un unregisterReceiver(mBroadcastReceiver); là où il faut.

    Par contre, le morceau de code entre /* ... */ crée l'erreur suivante dans Eclipse et Android Studio :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Error:(95, 25) error: strings in switch are not supported in -source 1.6
    (use -source 7 or higher to enable strings in switch)
    Dans Eclipse en cliquant sur l'option d'application de la source 7, le problème est corrigé.

    Dans Android Studio, non. Que et où quoi faire ?

    Cordialement.

    Pierre

  7. #7
    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 mais non

    On ne fait pas de switch sur une chaine... ou des objets.
    Un switch ne peut se faire que sur des types de base (boolean, byte, short, int , long, char) ou des enums.

    Là en l'occurence faut se le taper à la main:
    if (BluetoothDevice.ACTION_ACL_CONNECTED.equals(action)) {
    ///
    } else if (BluetoothDevice.ACTION_ACL_DISCONNECTED.equals(action)) {
    ////
    }
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  8. #8
    Membre éprouvé
    Avatar de ChPr
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    2 022
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 78
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 022
    Points : 1 049
    Points
    1 049
    Par défaut
    Citation Envoyé par nicroman Voir le message
    oui mais non

    On ne fait pas de switch sur une chaine... ou des objets.
    Un switch ne peut se faire que sur des types de base (boolean, byte, short, int , long, char) ou des enums. ...
    oui mais non. Car , "Dans Eclipse en cliquant sur l'option d'application de la source 7, le problème est corrigé.", J'ai pu constater que cela fonctionne ; aussi bizarre que cela parait. Peu être que dans cette version, une chaîne est identifiée par un nombre, auquel cas , on retombe dans les types de base ???

    Mais bon, comme je n'ai pas envie de m'ennuyer avec cela, je vais faire du if ... else ...

    Cordialement.

    Pierre

  9. #9
    Modérateur
    Avatar de Hizin
    Homme Profil pro
    Développeur mobile
    Inscrit en
    Février 2010
    Messages
    2 180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Développeur mobile

    Informations forums :
    Inscription : Février 2010
    Messages : 2 180
    Points : 5 072
    Points
    5 072
    Par défaut
    Le switch sur String est une fonctionnalité apportée par Java 7.
    Il faut toujours autant faire attention et factoriser le code en utilisant des String en tant que clé, mais c'est toutafé possible.
    C'est Android, PAS Androïd, ou Androïde didiou !
    Le premier est un OS, le second est la mauvaise orthographe du troisième, un mot français désignant un robot à forme humaine.

    Membre du comité contre la phrase "ça marche PAS" en titre et/ou explication de problème.

    N'oubliez pas de consulter les FAQ Android et les cours et tutoriels Android

  10. #10
    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
    Les fonctionnalités de Java 7 (diamond, multi-catch, try-with, switch-string), ne sont pas *obligatoirement* supportées. Il existe un moyen de forcer le compilateur à utiliser Java 7.

    http://tools.android.com/tech-docs/n...patibility-1.7

    A noter que la compilation pour Android 5.0+ nécessite Java 7
    (et c'est aussi vrai sous Eclipse):
    https://developer.android.com/tools/...adt.html#notes


    Par contre, si le targeting est inférieur à kit-kat, je recommande de rester en Java 6.
    Quant au switch sur des strings, pour des raisons de lisibilité du code, il a été banni (en même temps, ne sont autorisé chez nous que les switch sur des enums... donc bon... )
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

Discussions similaires

  1. [WS 2003] comment savoir si un serveur est intégré dans une AD
    Par sparowme dans le forum Windows Serveur
    Réponses: 2
    Dernier message: 28/08/2009, 09h38
  2. Réponses: 1
    Dernier message: 01/06/2008, 04h58
  3. Réponses: 1
    Dernier message: 20/03/2008, 11h29
  4. Réponses: 9
    Dernier message: 06/02/2006, 14h12
  5. Comment savoir si un serveur Firebird est actif
    Par richard038 dans le forum Bases de données
    Réponses: 4
    Dernier message: 06/01/2006, 00h07

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