Généralisation de capteur sous Android : problème de listener

Généralisation de capteur sous Android : problème de listener - Android - Programmation

Marsh Posté le 28-11-2014 à 20:55:29    

Salut à tous,
 
Je vous explique brièvement mon problème. Je dois développer une application Android qui doit pouvoir obtenir les données de capteurs d'accélération (celui interne au smartphone ou bien un externe via BT par exemple). Le but est d'avoir le moins de couplage possible. Je voudrais qu'un capteur, qu'il soit interne ou externe, soit vu de la même manière par la classe qui va l'utiliser (dans mon cas pour mes premiers tests, la classe principale MainActivity).
 
Mon code contiendra 3 packages :
 
1. Le principal, contenant l'activité principale et instanciera un objet Accéléro Universel.
 
2. Un package de capteurs d'accélération permettant d'instancier un objet "Accéléromètre Universel" en utilisant une interface. Elle a la structure suivante :
2a. Une classe accelero universel abstraite
2b. Une classe accelero interne héritant de 2a., elle implémente SensorEventListener pour recevoir les données du capteur interne (avec un objet Sensor, SensorManager, etc.), tout va bien
2c. Une classe capteur BT héritant de lui aussi de 2a.
2d. Une interface qui est implémentée dans ma classe principale (1) ayant une méthode pour obtenir les données, appelons-là "onAcceleroNewData(float newData)" (dans un premier temps, je ne récupère la valeur que d'un axe). Idéalement, quand de nouvelles données arrivent, le programme ira les chercher dans cette méthode.
 
3. Un package BT server utilisé par 2c. si l'on souhaite utiliser un capteur BT (un peu comme une analogie aux classes Sensor, SensorManager, etc. fourni par Android pour utiliser les capteurs internes). Ce package est en fait déjà codé par un collègue.
 
Voilà le cadre est posé. Pour le moment je n'ai pas codé 2c. je m'occupe uniquement d' "universaliser" mon capteur interne pour qu'il soit possible d'instancier un objet Acceleromètre Universel dans ma classe principale le plus simplement possible.
 
Mon problème est que j'arrive bien à coder le tout sauf la partie "listener" qui permettrait d'aller chercher les données dans "onAcceleroNewData(float newData)". Exactement comme lorsque l'on utilise un capteur interne : le programme va dans une méthode "onSensorChanged(SensorEvent event)". Pour que ça fonctionne, il faut ajouter un listener à l'objet capteur du genre MySensorManager.registerListener().
 
Voilà, comment je pourrais créer un système de listener dans mon cas... je crois qu'une solution est d'utiliser un Handler, ou un Observer, ou autre... bref j'ai des connaissances de base en Java mais mon problème est au-dela de mes compétences actuelles!
 
Un grand merci à celui, celle ou ceux qui m'aideront!


---------------
Intel Core i7 2600K / Corsair H60 / Asus P8P67 Deluxe / Asus GTX 580 DirectCUII / Corsair Vengeance 1866 MHz 2x4 Go CAS9 / NZXT Phantom rouge et blanc / Seasonic X-850 / Corsair Force Series GT 240 Go / Western Digital Caviar Blue 1 To SATA III / Lite-On
Reply

Marsh Posté le 28-11-2014 à 20:55:29   

Reply

Marsh Posté le 01-12-2014 à 11:24:08    

C'est vous qui n'êtes pas plus doués que moi ou c'est moi qui m'exprime mal?!


---------------
Intel Core i7 2600K / Corsair H60 / Asus P8P67 Deluxe / Asus GTX 580 DirectCUII / Corsair Vengeance 1866 MHz 2x4 Go CAS9 / NZXT Phantom rouge et blanc / Seasonic X-850 / Corsair Force Series GT 240 Go / Western Digital Caviar Blue 1 To SATA III / Lite-On
Reply

Marsh Posté le 02-12-2014 à 22:56:04    

En fait j'ai trouvé la solution donc c'est tout bon! Merci quand même!


---------------
Intel Core i7 2600K / Corsair H60 / Asus P8P67 Deluxe / Asus GTX 580 DirectCUII / Corsair Vengeance 1866 MHz 2x4 Go CAS9 / NZXT Phantom rouge et blanc / Seasonic X-850 / Corsair Force Series GT 240 Go / Western Digital Caviar Blue 1 To SATA III / Lite-On
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed