Nun, es scheint, dass Sie eine Anwendung erstellen möchten, die die Sensoren auf einem Android-Gerät für Ihre Anwendung beim Testen auf dem Emulator emuliert.
Wahrscheinlich in der Anwendung, haben Sie eine Zeile wie diese:
SensorManager mSensorManager = (SensorManager)getSystemService(SENSOR_SERVICE);
Warum eine Schnittstelle nicht erstellen, die die Methoden, die Sie von Sensormanager verwenden hat:
interface MySensorManager {
List<Sensor> getSensorList(int type);
... // You will need to add all the methods you use from SensorManager here
}
und erstellen Sie einen Wrapper für Sensormanager, dass ruft nur diese Methoden auf einem realen SensorManager-Objekt:
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()
}
Und dann erstellen Sie einen anderen MySensorManager, der diesmal commu niziert über einen Socket auf eine Desktop-Anwendung, die Sie erstellen, wo Sie die Sensorwerte oder etwas eingeben:
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
}
Und schließlich ersetzen Ihre erste Linie:
SensorManager mSensorManager = (SensorManager)getSystemService(SENSOR_SERVICE);
Mit einer neuen Linie:
MySensorManager mSensorManager;
if(YOU_WANT_TO_EMULATE_THE_SENSOR_VALUES) {
mSensorManager = new MyFakeSensorManager();
else {
mSensorManager = new MySensorManagerWrapper((SensorManager)getSystemService(SENSOR_SERVICE));
}
Jetzt können Sie dieses Objekt anstelle des zuvor verwendeten SensorManagers verwenden.
Hallo Isaac !! Danke für deine Antwort. Das ist mehr oder weniger das, was ich bauen will, ich werde es versuchen und euch alle wissen lassen, wie es sich entwickelt hat. =) – Hugo
Hallo, hast du jemals die Lösung implementiert? Ich habe es kürzlich ausprobiert und bin auf das Problem gestoßen, ich müsste neue SensorEvent-Objekte erstellen, aber ich kann die Werte nicht setzen, da sie in der SensorEvent-Klasse endgültig sind. Als ich versuchte dies zu umgehen, indem ich es über Reflektion einstellte, bekam ich ClassNotFound Fehler auf dem SensorEvent, wenn ich mich richtig erinnere ... – andreas