Componente Termômetro Vintage + SensorSimulator no emulador Android

Depois que eu encontreieste belo componente personalizado que analogamente (esta é a palavra certa?) exibe a temperatura lida do sensor de temperatura do dispositivo Android, eu queria testá-lo com o emulador para ver como ele funciona, então eu encontreieste simulador de sensor e alterou a fonte do componente para trabalhar com ele.

Eu consegui fazê-lo para trabalhar em um dispositivo emulado, no entanto eu fiz algumas suposições de sorte e gostaria de saber exatamente o que eu fiz :-)

Aqui estão as mudanças no código do termômetro que tive que fazer para funcionar em conjunto com o simulador do sensor de temperatura:

Depois de importar osensorsimulator classes:

<code>import org.openintents.sensorsimulator.hardware.Sensor;
import org.openintents.sensorsimulator.hardware.SensorEvent;
import org.openintents.sensorsimulator.hardware.SensorEventListener;
import org.openintents.sensorsimulator.hardware.SensorManagerSimulator;
</code>

Eu tive que remover o

<code>import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
</code>

Mudou

private SensorManager getSensorManager()

para dentro

private SensorManagerSimulator getSensorManager()

Então o primeiro problema surgiu. De acordo comComo usar o SensorSimulator em sua aplicação Eu mudei a linha:

return (SensorManager) getContext().getSystemService(Context.SENSOR_SERVICE);

para dentro

return SensorManagerSimulator.getSystemService(this, SENSOR_SERVICE);

e isso foi um erro. Instância dethis Eu tive que usargetContext(), Eu não sei por que isso aconteceu - talvez porquethermometer classe se estendeView portanto, não é atividade? E em vez deSENSOR_SERVICE Eu tive que colocarContext.SENSOR_SERVICE.

Depois disso, a próxima mudança foi:

<code>private void attachToSensor() {
    SensorManagerSimulator sensorManager = getSensorManager();
    sensorManager.connectSimulator();
</code>

Desde que parecesensorsimulator não implementagetSensorList Eu tive que substituir

<code>List<Sensor> sensors = sensorManager.getSensorList(Sensor.TYPE_TEMPERATURE);
</code>

com

<code>Sensor sensor = sensorManager.getDefaultSensor(Sensor.TYPE_TEMPERATURE);
</code>

e para remover

<code>if (sensors.size() > 0) {
        Sensor sensor = sensors.get(0);
</code>

Então, claro, eu também removi oelse declaração, então a situação quando o sensor de temperatura está faltando agora provavelmente lançaria uma exceção ao tentar registrar o listener.

No final, houve mais uma mudança que tive que fazer para me livrar dos erros de compilação, por alguma razão a implementação deregisterListener emSensor Simulator aceita menos argumentos do que o método do Android, então eu tive que remover ohandler parâmetro de

<code>sensorManager.registerListener(this, sensor, SensorManagerSimulator.SENSOR_DELAY_FASTEST, handler);
</code>

Aqui, eu gostaria de saber por que desta vez não precisei usargetContext() ao invés dethis!

Isso é tudo o que eu tive que mudar, a última coisa foi remover vars não utilizados (manipulador), importações não utilizadas (java.util.List) e removerhandler = new Handler();.

Eu acho este exemplo de componente de interface personalizado muito interessante e espero que alguém vai esclarecer e talvez polonês o código.

questionAnswers(0)

yourAnswerToTheQuestion