bonjour,
je suis toute nouvelle sur le forum alors soyez indulgent svp :/
Je développe une application android et j'aurais besoin d'un coup de pouce.
Le principe général de l'appli est de lire des informations sur des appareils par bluetooth. Mon problème se situe une fois la connexion bluetooth établit entre ma tablette et l'appareil, j'arrive à lire les données qui m'intéresse mais je n'arrive pas à faire une lecture "live" des informations (ou du moins un raffraichissement assez rapide des informations pour qu'on puisse le considérer comme "live", je n'ai pas besoin d'un truc hyper rapide, mais tout les 500ms par ex ou de l'ordre de grandeur)
J'ai une activité et une seconde classe qui s'occupe de la connexion bluetooth. Cette classe n'est pas de moi (je poursuit le travail d'un autre et j'ai donc pu reprendre cette partie), au lancement de l'activité, la connexion bluetooth se fait sans problème. Une méthode me permet d'envoyer des ordres pour lire les informations qui m'intéresse. J'arrive à envoyer les ordres un par un, en enregistrant la réponse reçue à chaque fois.
pour faire cela, j'ai un Thread qui gère la connexion (après les thread server et client qui initialise la connexion), et qui est constante lecture de myInputStream. Dès qu'il reçoit une réponse, il envoi un message à un handler de l'activité principale. Celui ci enregistre la réponse envoi l'ordre suivant... ainsi de suite jusqu'à avoir obtenu toutes mes réponses.
ce que je souhaite faire, c'est qu'une fois que toutes les réponses ont été enregistré une fois, c'est pouvoir lancer un "live" qui met à jour les informations de manière régulière et cyclique tant qu'on ne lui dit pas de s’arrêter. Pour celà j'ai créé un autre thread dans mon activité principal (qui démarre après un clic sur un bouton), celui si envoi un ordre et se repose 500ms : ceci en boucle (tant que une condition booléenne est vrai)
Cela fonctionne mais pas de manière infini, après quelques ordre envoyés, l'appli crash. Il est propable que ce soit un problème de synchronisation de thread. Du coup j'ai qq questions à poser :
- Est ce qu'un handler partagé peut poser un pb de synchronisation ?
- Est-il possible de synchroniser deux thread qui ne sont pas dans la même classe ?
ce qui me pose pb en fait, c'est le thread de lecture des informations qui est toujours en lecture, je ne comprends pas pq en envoyant une seule fois mes ordres ça fonctionne et si je veux faire un cycle "sans fin" avec une pause entre chaque ça ne fonctionne pas ?
Pour ceux qui ont travaillé avec du bluetooth, vous avez du surement voir des exemples de code avec un thread
connectedThread,
public void run()...
while (true) myInputStream.read(buffer);
myHandler.obtainMessage(...,..., buffer.clone).sendToTarget();
;
public void write( byte[] bytes)
myOutputStream.write(bytes)..;
Je ne peux pas poster de code là, mais je l'ajouterai plus tard (si jamais vous voulez des parties précises dites moi)
J'ai fait beaucoup de recherche sur internet avant de poster ce msg donc éviter de me dire que google est mon amis :/
J'ai commencé android depuis deux mois seulement sans aucune connaissance en java initialement donc désolé si le problème est mal posé :s je suis une débutante en android et en programmation en générale
Merci d'avance
Partager