Eh bien, il semble que vous voulez faire est une application qui émuler les capteurs sur un appareil Android pour votre application lors du test sur l'émulateur.
probablement dans votre application, vous avez une ligne comme ceci:
SensorManager mSensorManager = (SensorManager)getSystemService(SENSOR_SERVICE);
Pourquoi ne pas créer une interface qui a les méthodes que vous utilisez de SensorManager:
interface MySensorManager {
List<Sensor> getSensorList(int type);
... // You will need to add all the methods you use from SensorManager here
}
Et puis créez une enveloppe pour SensorManager que appelle simplement ces méthodes sur un objet réel SensorManager:
class MySensorManagerWrapper implements MySensorManager {
SensorManager mSensorManager;
MySensorManagerWrapper(SensorManager sensorManager) {
super();
mSensorManager = sensorManager;
}
List<Sensor> getSensorList(int type) {
return mSensorManager.getSensorList(type_;
}
... // All the methods you have in your MySensorManager interface will need to be defined here - just call the mSensorManager object like in getSensorList()
}
Ensuite, créez un autre MySensorManager, cette fois-ci nicates sur une prise à une application de bureau vous allez créer où vous entrez les valeurs du capteur ou quelque chose:
class MyFakeSensorManager implements MySensorManager {
Socket mSocket;
MyFakeSensorManager() throws UnknownHostException, IOException {
super();
// Connect to the desktop over a socket
mSocket = = new Socket("(IP address of your local machine - localhost won't work, that points to localhost of the emulator)", SOME_PORT_NUMBER);
}
List<Sensor> getSensorList(int type) {
// Use the socket you created earlier to communicate to a desktop app
}
... // Again, add all the methods from MySensorManager
}
Et enfin, remplacez votre première ligne:
SensorManager mSensorManager = (SensorManager)getSystemService(SENSOR_SERVICE);
Avec une nouvelle ligne:
MySensorManager mSensorManager;
if(YOU_WANT_TO_EMULATE_THE_SENSOR_VALUES) {
mSensorManager = new MyFakeSensorManager();
else {
mSensorManager = new MySensorManagerWrapper((SensorManager)getSystemService(SENSOR_SERVICE));
}
Vous pouvez maintenant utiliser cet objet à la place du SensorManager que vous utilisiez auparavant.
Salut Isaac !! Merci pour votre réponse. C'est plus ou moins ce que je veux construire, je vais essayer et vous dire à tous comment ça s'est passé. =) – Hugo
Salut, as-tu déjà implémenté la solution? Je l'ai essayé récemment et j'ai rencontré le problème, je devrais créer de nouveaux objets SensorEvent, mais je ne peux pas définir les valeurs, car elles sont finales dans la classe SensorEvent. Quand j'ai essayé de contourner ce problème en le paramétrant par réflexion, j'ai eu des erreurs ClassNotFound sur le SensorEvent, si je me souviens bien ... – andreas