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.