2009-06-29 10 views
10

Estoy creando una aplicación para la plataforma Android y me gustaría usar el acelerómetro. Ahora, he encontrado una aplicación muy buena para la simulación de sensores (OpenIntents' SensorSimulator) pero, por lo que quiero hacer, me gustaría crear mi propia aplicación de simulador de sensores.¿Cómo construir un simulador de sensores para Android?

No he encontrado información sobre cómo hacer esto (no sé si el desmontaje del contenedor del simulador es correcto) y, como dije, me gustaría construir una versión más pequeña y simple de un simulador de sensor, más adecuado para mis intenciones

¿Sabes dónde podría empezar? ¿dónde puedo ver cuáles son las piezas de código que necesito construir?

Básicamente, todo lo que pido solo por alguna dirección.

Respuesta

8

Bueno, parece que lo que quieres hacer es una aplicación que emulará los sensores en un dispositivo Android para tu aplicación mientras pruebas en el emulador.
Probablemente en su aplicación, tienen una línea como esta:

SensorManager mSensorManager = (SensorManager)getSystemService(SENSOR_SERVICE); 

por qué no crear una interfaz que tiene los métodos que utiliza desde SensorManager:

interface MySensorManager { 
    List<Sensor> getSensorList(int type); 

    ... // You will need to add all the methods you use from SensorManager here 
} 

y luego crear un contenedor para SensorManager que Sólo aquellas llamadas a métodos en un objeto real 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() 
} 

Y luego crear otro MySensorManager, que esta vez commu nicates más de un conector a una aplicación de escritorio que va a crear en el que introduce los valores de los sensores o algo:

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 
} 

Y, por último, reemplace su primera línea:

SensorManager mSensorManager = (SensorManager)getSystemService(SENSOR_SERVICE); 

Con una nueva línea:

MySensorManager mSensorManager; 
if(YOU_WANT_TO_EMULATE_THE_SENSOR_VALUES) { 
    mSensorManager = new MyFakeSensorManager(); 
else { 
    mSensorManager = new MySensorManagerWrapper((SensorManager)getSystemService(SENSOR_SERVICE)); 
} 

Ahora puede usar ese objeto en lugar del SensorManager que utilizó anteriormente.

+1

Hola Isaac !! Gracias por tu respuesta. Eso es más o menos lo que quiero construir, lo intentaré y les contaré cómo resultó. =) – Hugo

+0

Hola, ¿alguna vez implementó la solución? Lo intenté recientemente y me encontré con el problema, tendría que crear nuevos objetos SensorEvent, pero no puedo establecer los valores, ya que son finales en la clase SensorEvent. Cuando traté de solucionar esto estableciéndolo mediante reflexión, obtuve errores de ClassNotFound en SensorEvent, si recuerdo correctamente ... – andreas

Cuestiones relacionadas