XE8で作成したAndroidアプリで一部のセンサーが正常に動作しない
対象となるセンサー
- Light Sensor(光センサー)
- Proximity Sensor(近接センサー)
- Pressure Sensor(圧力センサー)
問題
XE8で作成したAndroidアプリでLight Sensor(光センサー)、Proximity Sensor(近接センサー)、Pressure Sensor(圧力センサー)の3つのセンサーが正常に動作しない症状が報告されています。
以下の図は、XE8に付属するサンプルプログラム(SenserInfo)をAndroidで実行し、ProximitySensorのHumanProximityの値を取得していますが、正常に動作していません。
解決
該当する3つのセンサーは、コンストラクタ内で、センサーを開始するメソッドが実行されていませんでした。そのためSystem.Android.Sensorsユニットの以下の該当箇所を修正し、修正したSystem.Android.Sensors.pasを自身のプロジェクトへ組み込んでください。
修正は、以下の三カ所です。
- Light Sensor (光センサー)
constructor TAndroidNativeLightSensor.Create(AManager: TSensorManager);
begin
inherited;
FNativeSensor := TNativeSensor.Create(ASENSOR_TYPE_LIGHT);
FNativeSensor.DoStart; //追加
end;
- Pressure Sensor(圧力センサー)
constructor TAndroidNativePressureSensor.Create(AManager: TSensorManager);
begin
inherited;
FNativeSensor := TNativeSensor.Create(ASENSOR_TYPE_PRESSURE);
FNativeSensor.DoStart; //追加
end;
- Proximity Sensor(近接センサー)
constructor TAndroidNativeProximitySensor.Create(AManager: TSensorManager);
begin
inherited;
FNativeSensor := TNativeSensor.Create(ASENSOR_TYPE_PROXIMITY);
FNativeSensor.DoStart; //追加
end;
修正後の動作をサンプルプログラム(SenserInfo)で確認すると、以下の図にようにProximitySensorが正常に稼働し、HumanProximityの値が取得できます。