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.