Domanda

Sto costruendo un applicazione per la piattaforma Android e vorrei utilizzare l'accelerometro. Ora, ho trovato una bella applicazione per la simulazione del sensore ( OpenIntents' SensorSimulator ) ma, per quello che voglio fare, una vorrebbe creare la mia propria applicazione simulatore di sensore.

Non ho trovato informazioni su come fare questo (non so se lo smontaggio il barattolo del simulatore è corretto) e, come ho detto, mi piacerebbe costruire una versione più piccola e più semplice di un simulatore di sensore, più adatto per le mie intenzioni.

Sai dove posso cominciare? dove posso vedere quali sono le parti di codice che ho bisogno di costruire?

In sostanza, tutta la mia chiedendo solo per qualche direzione.

È stato utile?

Soluzione

Bene, sembra che cosa si vuole fare è un'applicazione che emulerà i sensori su un dispositivo Android per la vostra applicazione durante il test sull'emulatore.
Probabilmente nella vostra applicazione, si dispone di una linea come questa:

SensorManager mSensorManager = (SensorManager)getSystemService(SENSOR_SERVICE);

Perché non creare un'interfaccia che ha i metodi che si utilizzano da SensorManager:

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

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

E quindi creare un wrapper per SensorManager che proprio chiama i metodi su un oggetto reale 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()
}

E poi creare un altro MySensorManager, che questa volta comunica su un socket per un'applicazione desktop si creerà in cui si immettono i valori dei sensori o qualcosa del genere:

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
}

E, infine, sostituire la prima riga:

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

Con una nuova linea:

<*>

Ora si può semplicemente utilizzare l'oggetto al posto del SensorManager utilizzato in precedenza.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top