1

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つ変更を加える必要がありました。何らかの理由で、registerListenerinの実装はSensor Simulatorandroidのメソッドよりも少ない引数を受け入れるため、handlerからパラメーターを削除する必要がありました。

sensorManager.registerListener(this, sensor, SensorManagerSimulator.SENSOR_DELAY_FASTEST, handler);

ここで、なぜ今回は!getContext()の代わりに使用する必要がなかったのか知りたいのですが。this

変更しなければならなかったのはこれだけです。最後に、未使用の変数(handler)、未使用のインポート(java.util.List)を削除し、を削除しhandler = new Handler();ました。

このカスタムUIコンポーネントの例は非常に興味深いものであり、誰かがコードを明確にして、おそらく洗練してくれることを願っています。

4

0 に答える 0