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.

questionAnswers(0)

yourAnswerToTheQuestion