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:

import org.openintents.sensorsimulator.hardware.Sensor;
import org.openintents.sensorsimulator.hardware.SensorEvent;
import org.openintents.sensorsimulator.hardware.SensorEventListener;
import org.openintents.sensorsimulator.hardware.SensorManagerSimulator;

Eu tive que remover o

import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;

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:

private void attachToSensor() {
    SensorManagerSimulator sensorManager = getSensorManager();
    sensorManager.connectSimulator();

Desde que parecesensorsimulator não implementagetSensorList Eu tive que substituir

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

com

Sensor sensor = sensorManager.getDefaultSensor(Sensor.TYPE_TEMPERATURE);

e para remover

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

Então, claro, eu também removi oelse&nbsp;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&nbsp;emSensor Simulator&nbsp;aceita menos argumentos do que o método do Android, então eu tive que remover ohandler&nbsp;parâmetro de

sensorManager.registerListener(this, sensor, SensorManagerSimulator.SENSOR_DELAY_FASTEST, handler);

Aqui, eu gostaria de saber por que desta vez não precisei usargetContext()&nbsp;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.