表題の通りです。
安定の踏み抜き率。
センサーから測定値を取得するには、大体次のようなSensorEventListenerになると思います。
@Override public void onSensorChanged(SensorEvent event) { if (event.accuracy == SensorManager.SENSOR_STATUS_NO_CONTACT) { return; } else if (event.accuracy == SensorManager.SENSOR_STATUS_UNRELIABLE) { return; } //測定値を利用するコード・・・ }
ずっとデータを取得できないセンサーがあるなあと思ったら、ずっとSENSOR_STATUS_UNRELIABLEのターンでした。
データが取れないからサンプルコードはみんなreturn voidなのかと思ってたけど、そういうセンサーがいるのでどうも違うみたいです。
そこで改めてevent.accuracyがどういう値をとるのかコンニャクほんやくしてみました。
/** センサーが触れていないため信頼できない */ public static final int SENSOR_STATUS_NO_CONTACT = -1; /** センサーから返される値は信頼できないため、キャリブレーションが必要か、環境が測定を許可しない */ public static final int SENSOR_STATUS_UNRELIABLE = 0; /** 低精度データであるため、環境に合わせたキャリブレーションが必要 */ public static final int SENSOR_STATUS_ACCURACY_LOW = 1; /** 平均精度データ。環境に合わせたキャリブレーションは測定値を改善する */ public static final int SENSOR_STATUS_ACCURACY_MEDIUM = 2; /** 最高精度データ */ public static final int SENSOR_STATUS_ACCURACY_HIGH = 3;
センサーから返される値は信頼できないため、
キャリブレーションが必要か、環境が測定を許可しない(?)
結局event.valuesに必ず値が入ってるのか確信が持てない・・・
-1は値が取れなかったっていうステータスにしてくれたらよかったのに。
ぬるぽチェックしたほうがいいのかな・・・そんなデバイスはぬるぽで落ちてしまえ
2019/5/10追記:
SensorEventのJavaDocにあるサンプルコードではevent.accuracyをチェックするコードは一つもないので、特別な事情がない限りifでチェックしない方がいいのかも。
event.valuesには必ず値が入ってると思ってよさそう。
@Override public void onSensorChanged(SensorEvent event) { //チェックする必要なし! //if (event.accuracy == SensorManager.SENSOR_STATUS_NO_CONTACT) { // return; //} //else if (event.accuracy == SensorManager.SENSOR_STATUS_UNRELIABLE) { // return; //} //測定値を利用するコード・・・ }