4

重力センサーonSensorChanged(SensorEvent event)の値は、イベントの値を呼び出すたびに増加します。値が増加し、少しの時間 (約 1 分) 後に NaN 値に達します。なぜこれが起こっているのか誰かが言うことができますか?コード:

private void recordData(SensorEvent e) {
    String label;
    int currentSensorId = -1;
    switch (e.sensor.getType()) {
    case Sensor.TYPE_ACCELEROMETER:
        currentSensorId = 0;
        label = LOG_LABEL_ACCELEROMETER;
        break;
    case Sensor.TYPE_GYROSCOPE:
        label = LOG_LABEL_GYROSCOPER;
        currentSensorId = 1;
        break;
    case Sensor.TYPE_GRAVITY:
        label = LOG_LABEL_GRAVITY;
        currentSensorId = 2;
        break;
    case Sensor.TYPE_ROTATION_VECTOR:
        label = LOG_LABEL_ROTATION_VECTOR;
        currentSensorId = 3;
        break;
    default:
        label = "UNKNOWN SENSOR TYPE!";
        break;
    }
    if (currentSensorId == -1)
        return;

    // Force set events frequency to value from config,
    // cause sensor events minimal frequency = 0.2 sec.
    timePassed[currentSensorId] = System.currentTimeMillis()
            - lastSensorEventTime[currentSensorId];
    if (timePassed[currentSensorId] < Config.SENSOR_DELAY_MILLISEC) {
        return;
    } else {
        lastSensorEventTime[currentSensorId] = System.currentTimeMillis();
    }

    if (this.pauseRecordingData || checkSDCardMemory())
        return;
    fileWriter.writeEvent(label, System.currentTimeMillis(), e.values);
}

public void writeEvent(String eventSource, long timestamp, float[] values) {
        Log.d(TAG, "writeEvent(); eventSource = " + eventSource);       


    if ( !this.fileExists ) createNewFile();        
    try {       
        String valuesString = eventSource + "\t" + String.format( "%d\t", timestamp);

        for (int i = 0; i < values.length; i++) {
            valuesString += String.format( "%f\t",values[i]);
            Log.d(TAG, "writeEvent(); values[" + i + "] = " + values[i]);
    }           
        buffWriter.append(valuesString + "\n");
    } catch (IOException e1) {              
          e1.printStackTrace();
          Log.d(TAG,"RECORDING EVENT TO FILE FAILED!");
    }               
}
4

1 に答える 1

0

次の 2 つの可能性があります。

  1. 最も可能性の高いもの: コードにエラーがあります。たとえば、変数をリセットしたり、値を追加したりしていません (詳細については、http://developer.android.com/guide/topics/sensors/を参照してください)。 sensor_motion.html )。

  2. 重力センサーが壊れています (確認するには、別のデバイスで試してください)。

さらにヘルプが必要な場合は、コードを投稿してください。重力センサーから読み取った値にどのようにアクセスして管理していますか。

編集:

前述したように、コードにエラーがあります。センサー読み取り遅延は、可能なオプションのいずれかに設定する必要があります。

int     SENSOR_DELAY_FASTEST     get sensor data as fast as possible
int     SENSOR_DELAY_GAME        rate suitable for games
int     SENSOR_DELAY_NORMAL      rate (default) suitable for screen orientation changes
int     SENSOR_DELAY_UI          rate suitable for the user interface 

カスタム値ではありません!!!

解決策を見つけていただきありがとうございます。

于 2012-10-09T12:11:58.420 に答える