Pergunta

Estou construindo um aplicativo para a plataforma Android e gostaria de usar o acelerômetro. Agora, encontrei uma aplicação muito boa para simulação de sensor (Sensorsimulator do OpenIntents) Mas, pelo que eu quero fazer, A gostaria de criar meu próprio aplicativo de simulador de sensor.

Não encontrei informações sobre como fazer isso (não sei se a desmontagem do jar do simulador está correta) e, como eu disse, gostaria de construir uma versão menor e simples de um simulador de sensor, mais adequado para o meu intenções.

Você sabe por onde eu poderia começar? Onde posso ver quais são as partes de código que eu preciso construir?

Basicamente, tudo o meu pedindo apenas uma direção.

Foi útil?

Solução

Bem, parece que o que você deseja fazer é um aplicativo que imitará os sensores em um dispositivo Android para o seu aplicativo durante o teste no emulador.
Provavelmente em seu aplicativo, você tem uma linha como esta:

SensorManager mSensorManager = (SensorManager)getSystemService(SENSOR_SERVICE);

Por que não criar uma interface que tenha os métodos que você usa do Sensormanager:

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

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

E, em seguida, crie um invólucro para o Sensormanager que apenas chama esses métodos em um objeto Sensormanager real:

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 depois crie outro MySensormanager, que desta vez se comunica sobre um soquete em um aplicativo de desktop que você criará onde inserir os valores do sensor ou algo assim:

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, finalmente, substitua sua primeira linha:

SensorManager mSensorManager = (SensorManager)getSystemService(SENSOR_SERVICE);

Com uma nova linha:

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

Agora você pode simplesmente usar esse objeto em vez do sensemanager que você usou antes.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top