Komponent Vintage Thermometer + SensorSimulator na emulatorze Androida
Po tym jak znalazłemten miły niestandardowy komponent że analogicznie (czy to właściwe słowo?) wyświetla odczyt temperatury z czujnika temperatury urządzenia z Androidem, chciałem przetestować go z emulatorem, aby zobaczyć, jak działa, więc znalazłemten symulator czujnika i zmienił źródło komponentu, aby z nim pracować.
Udało mi się pracować na emulowanym urządzeniu, jednak udało mi się kilka razy zgadnąć i chciałbym wiedzieć, co dokładnie zrobiłem :-)
Oto zmiany w kodzie termometru, które musiałem wykonać, aby działał w połączeniu z symulatorem czujnika temperatury:
Po zaimportowaniusensorsimulator
klasy:
<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>
Musiałem usunąć
<code>import android.hardware.Sensor; import android.hardware.SensorEvent; import android.hardware.SensorEventListener; </code>
Zmieniono
private SensorManager getSensorManager()
w
private SensorManagerSimulator getSensorManager()
Wtedy pojawił się pierwszy problem. WedługJak korzystać z SensorSimulator w aplikacji Zmieniłem linię:
return (SensorManager) getContext().getSystemService(Context.SENSOR_SERVICE);
w
return SensorManagerSimulator.getSystemService(this, SENSOR_SERVICE);
a to był błąd. Instad ofthis
Musiałem użyćgetContext()
, Nie jestem pewien, dlaczego tak było - może dlategothermometer
klasa się rozszerzaView
dlatego nie jest to aktywność? I zamiastSENSOR_SERVICE
Musiałem to zrobićContext.SENSOR_SERVICE
.
Potem następna zmiana:
<code>private void attachToSensor() { SensorManagerSimulator sensorManager = getSensorManager(); sensorManager.connectSimulator(); </code>
Ponieważ wydaje sięsensorsimulator
nie implementujegetSensorList
Musiałem wymienić
<code>List<Sensor> sensors = sensorManager.getSensorList(Sensor.TYPE_TEMPERATURE); </code>
z
<code>Sensor sensor = sensorManager.getDefaultSensor(Sensor.TYPE_TEMPERATURE); </code>
i usunąć
<code>if (sensors.size() > 0) { Sensor sensor = sensors.get(0); </code>
Potem oczywiście usunąłemelse
oświadczenie, więc sytuacja, w której brakuje czujnika temperatury, prawdopodobnie spowoduje teraz zgłoszenie wyjątku podczas próby zarejestrowania detektora.
Na koniec była jeszcze jedna zmiana, którą musiałem zrobić, aby pozbyć się błędów kompilacji, z jakiegoś powodu implementacjaregisterListener
wSensor Simulator
akceptuje mniej argumentów niż metoda androida, więc musiałem usunąćhandler
parametr z
<code>sensorManager.registerListener(this, sensor, SensorManagerSimulator.SENSOR_DELAY_FASTEST, handler); </code>
Tutaj chciałbym wiedzieć, dlaczego tym razem nie musiałem używaćgetContext()
zamiastthis
!?
To wszystko, co musiałem zmienić, ostatnią rzeczą było usunięcie nieużywanych vars (handler), nieużywanych importów (java.util.List) i usunięciehandler = new Handler();
.
Ten przykład niestandardowego komponentu interfejsu użytkownika jest bardzo interesujący i mam nadzieję, że ktoś wyjaśni i może wypoleruje kod.