Vintage Thermometer Komponente + SensorSimulator auf dem Android Emulator

Nachdem ich gefunden habediese nette kundenspezifische Komponente Dass analog (ist das das richtige Wort?) die vom Temperatursensor des Android-Geräts gelesene Temperatur anzeigt, wollte ich mit dem Emulator testen, um zu sehen, wie es funktioniert, habe ich also gefundendieser Sensorsimulator und änderte die Quelle der Komponente, um damit zu arbeiten.

Ich habe es geschafft, auf einem emulierten Gerät zu arbeiten, aber ich habe ein paar glückliche Vermutungen angestellt und möchte wissen, was ich genau getan habe :-)

Hier sind die Änderungen im Code des Thermometers, die ich vornehmen musste, damit es in Verbindung mit dem Temperatursensorsimulator funktioniert:

Nach dem Import dersensorsimulator Klassen:

<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>

Ich musste das entfernen

<code>import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
</code>

Geändert

private SensorManager getSensorManager()

in

private SensorManagerSimulator getSensorManager()

Dann trat das erste Problem auf. GemäßSo verwenden Sie den SensorSimulator in Ihrer Anwendung Ich habe die Zeile geändert:

return (SensorManager) getContext().getSystemService(Context.SENSOR_SERVICE);

in

return SensorManagerSimulator.getSystemService(this, SENSOR_SERVICE);

und das war ein fehler. Instad vonthis Ich musste verwendengetContext()Ich bin mir nicht sicher, warum das so war - vielleicht weilthermometer Klasse erweitertView deshalb ist es keine Aktivität? Und stattSENSOR_SERVICE Ich musste setzenContext.SENSOR_SERVICE.

Danach war die nächste Änderung:

<code>private void attachToSensor() {
    SensorManagerSimulator sensorManager = getSensorManager();
    sensorManager.connectSimulator();
</code>

Da scheint essensorsimulator implementiert nichtgetSensorList Ich musste ersetzen

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

mit

<code>Sensor sensor = sensorManager.getDefaultSensor(Sensor.TYPE_TEMPERATURE);
</code>

und zu entfernen

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

Dann habe ich natürlich auch das entferntelse Die Situation, in der der Temperatursensor fehlt, würde jetzt wahrscheinlich eine Ausnahme auslösen, wenn versucht wird, den Listener zu registrieren.

Am Ende gab es eine weitere Änderung, die ich vornehmen musste, um die Kompilierungsfehler zu beseitigen, aus irgendeinem Grund die Implementierung vonregisterListener imSensor Simulator Akzeptiert weniger Argumente als die Methode von Android, also musste ich die entfernenhandler Parameter von

<code>sensorManager.registerListener(this, sensor, SensorManagerSimulator.SENSOR_DELAY_FASTEST, handler);
</code>

Hier würde ich gerne wissen, warum ich diesmal nicht musstegetContext() anstattthis!?

Das war ungefähr alles, was ich ändern musste. Das Letzte war, nicht verwendete Vars (Handler), nicht verwendete Importe (java.util.List) zu entfernen und zu entfernenhandler = new Handler();.

Ich finde dieses Beispiel einer benutzerdefinierten UI-Komponente sehr interessant und hoffe, dass jemand den Code klären und vielleicht verbessern wird.

Antworten auf die Frage(0)

Ihre Antwort auf die Frage