Androidデバイスの温度センサーから読み取った温度をアナログで表示するこの素敵なカスタムコンポーネントを見つけた後(これは正しい言葉ですか?)、エミュレーターでテストしてどのように機能するかを確認したかったので、このセンサーシミュレーターとコンポーネントのソースを変更して、それと連動するようにしました。
私はそれをエミュレートされたデバイスで動作するように管理しましたが、いくつかの幸運な推測を行い、正確に何をしたか知りたいです:-)
温度センサーシミュレーターと組み合わせて動作させるために私がしなければならなかった温度計のコードの変更は次のとおりです。
sensorsimulator
クラスをインポートした後:
import org.openintents.sensorsimulator.hardware.Sensor;
import org.openintents.sensorsimulator.hardware.SensorEvent;
import org.openintents.sensorsimulator.hardware.SensorEventListener;
import org.openintents.sensorsimulator.hardware.SensorManagerSimulator;
私は削除する必要がありました
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
かわった
private SensorManager getSensorManager()
の中へ
private SensorManagerSimulator getSensorManager()
その後、最初の問題が発生しました。アプリケーションでSensorSimulatorを使用する方法に従って、次の行を変更しました。
return (SensorManager) getContext().getSystemService(Context.SENSOR_SERVICE);
の中へ
return SensorManagerSimulator.getSystemService(this, SENSOR_SERVICE);
それはエラーでした。this
私が使用しなければならなかったのですが、なぜそうなのかわかりgetContext()
ません-おそらくthermometer
クラスが拡張されてView
いるため、アクティビティではありませんか?そして、SENSOR_SERVICE
私が入れなければならなかった代わりにContext.SENSOR_SERVICE
。
その後、次の変更は次のとおりです。
private void attachToSensor() {
SensorManagerSimulator sensorManager = getSensorManager();
sensorManager.connectSimulator();
sensorsimulator
実装されていないようですのでgetSensorList
、交換する必要がありました
List<Sensor> sensors = sensorManager.getSensorList(Sensor.TYPE_TEMPERATURE);
と
Sensor sensor = sensorManager.getDefaultSensor(Sensor.TYPE_TEMPERATURE);
と削除するには
if (sensors.size() > 0) {
Sensor sensor = sensors.get(0);
次に、もちろんelse
ステートメントも削除したので、温度センサーが欠落している状況では、リスナーを登録しようとしたときに例外がスローされる可能性があります。
最後に、コンパイルエラーを取り除くためにもう1つ変更を加える必要がありました。何らかの理由で、registerListener
inの実装はSensor Simulator
androidのメソッドよりも少ない引数を受け入れるため、handler
からパラメーターを削除する必要がありました。
sensorManager.registerListener(this, sensor, SensorManagerSimulator.SENSOR_DELAY_FASTEST, handler);
ここで、なぜ今回は!getContext()
の代わりに使用する必要がなかったのか知りたいのですが。this
変更しなければならなかったのはこれだけです。最後に、未使用の変数(handler)、未使用のインポート(java.util.List)を削除し、を削除しhandler = new Handler();
ました。
このカスタムUIコンポーネントの例は非常に興味深いものであり、誰かがコードを明確にして、おそらく洗練してくれることを願っています。