Componente termómetro vintage + SensorSimulator en el emulador de Android
Después encontréeste agradable componente personalizado que de forma análoga (¿es esta la palabra correcta?) muestra la temperatura leída por el sensor de temperatura del dispositivo Android, quería probarlo con el emulador para ver cómo funciona, así que he encontradoeste simulador de sensor y alteró la fuente del componente para trabajar con él.
Me las arreglé para trabajar en un dispositivo emulado, sin embargo, he hecho algunas adivinanzas y me gustaría saber qué he hecho exactamente :-)
Aquí están los cambios en el código del termómetro que tuve que hacer para que funcionara junto con el simulador de sensor de temperatura:
Después de importar elsensorsimulator
clases:
<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>
Tuve que quitar el
<code>import android.hardware.Sensor; import android.hardware.SensorEvent; import android.hardware.SensorEventListener; </code>
Cambiado
private SensorManager getSensorManager()
dentro
private SensorManagerSimulator getSensorManager()
Entonces surgió el primer problema. De acuerdo aCómo utilizar el SensorSimulator en su aplicación Cambié la línea:
return (SensorManager) getContext().getSystemService(Context.SENSOR_SERVICE);
dentro
return SensorManagerSimulator.getSystemService(this, SENSOR_SERVICE);
Y eso fue un error. Instad dethis
Tuve que usargetContext()
, No estoy seguro de por qué fue así, tal vez porquethermometer
clase se extiendeView
por lo tanto no es actividad? Y en lugar deSENSOR_SERVICE
Tuve que ponerContext.SENSOR_SERVICE
.
Después de eso, el siguiente cambio fue:
<code>private void attachToSensor() { SensorManagerSimulator sensorManager = getSensorManager(); sensorManager.connectSimulator(); </code>
Ya que parecesensorsimulator
no implementagetSensorList
Tuve que reemplazar
<code>List<Sensor> sensors = sensorManager.getSensorList(Sensor.TYPE_TEMPERATURE); </code>
con
<code>Sensor sensor = sensorManager.getDefaultSensor(Sensor.TYPE_TEMPERATURE); </code>
y quitar
<code>if (sensors.size() > 0) { Sensor sensor = sensors.get(0); </code>
Entonces, por supuesto también quité elelse
Por lo tanto, la situación en la que falta el sensor de temperatura probablemente ahora arrojaría una excepción al intentar registrar el oyente.
Al final, tuve que hacer un cambio más para deshacerme de los errores de compilación, por alguna razón, la implementación deregisterListener
enSensor Simulator
acepta menos argumentos que el método de Android, así que tuve que eliminar elhandler
parámetro de
<code>sensorManager.registerListener(this, sensor, SensorManagerSimulator.SENSOR_DELAY_FASTEST, handler); </code>
Aquí, me gustaría saber por qué esta vez no tuve que usargetContext()
en lugar dethis
!?
Eso fue todo lo que tuve que cambiar, lo último fue eliminar los vars (manejadores) no utilizados, las importaciones no utilizadas (java.util.List) y eliminarhandler = new Handler();
.
Me parece muy interesante este ejemplo de componente de interfaz de usuario personalizado y espero que alguien aclare y quizás perfeccione el código.