Я пытаюсь осуществить дозирование датчика акселерометра и сохранить значения x, y, z в файле. Мне нужно сохранить все значения акселерометра. Пример: значения акселерометра в течение 10 минут.
Сценарий: экран устройства выключен, акселерометр зарегистрирован как SENSOR_DELAY_GAME и устройство находится в режиме ожидания.
Я изменил следующий код из github
https://github.com/googlesamples/android-BatchStepSensor.git для получения значений
private String[] mEventDelaysAccelero = new String[EVENT_QUEUE_LENGTH];
/**
* Listener that handles step sensor events for step detector and step counter sensors.
*/
private final SensorEventListener mListener = new SensorEventListener() {
@Override
public void onSensorChanged(SensorEvent event) {
// BEGIN_INCLUDE(sensorevent)
// store the delay of this event
recordDelay(event);
if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) {
final String delayString = getDelayStringAccelero();
String rmsValues="";
String[] buffer=delayString.split(",");
for(int i=0;i<buffer.length;i++){
String[] buffer1=delayString.split(":");
Double x=Double.parseDouble(buffer1[0]);
Double y=Double.parseDouble(buffer1[1]);
Double z=Double.parseDouble(buffer1[2]);
float rms=(float) Math.sqrt(Math.pow(x, 2) + Math.pow(y, 2) + Math.pow(z, 2));
//Store in file
Logger.e(MainActivity.context,TAG,i+")RMS="+rms+" Timestamp="+buffer1[3]);
}
// Get accelerometer values.
mSteps = (int) event.values[0];
// Update the card with the latest values
getCardStream().getCard(CARD_COUNTING)
.setTitle(getString(R.string.counting_title, mSteps))
.setDescription(getString(R.string.counting_description,
getString(R.string.sensor_accelerometer), mMaxDelay, rmsValues));
}
}
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
}
};
/**
* Records the delay for the event.
*
* @param event
*/
private void recordDelay(SensorEvent event) {
if(event.sensor.getType() == Sensor.TYPE_ACCELEROMETER){
// Calculate the delay from when event was recorded until it was received here in ms
// Event timestamp is recorded in us accuracy, but ms accuracy is sufficient here
long timeInMillis = (new Date()).getTime();// + (event.timestamp - System.nanoTime()) / 1000000L;
mEventDelaysAccelero[mEventData] = event.values[0]+":"+event.values[1]+":"+event.values[2]+":"+timeInMillis;
// Increment length counter
mEventLength = Math.min(EVENT_QUEUE_LENGTH, mEventLength + 1);
// Move pointer to the next (oldest) location
mEventData = (mEventData + 1) % EVENT_QUEUE_LENGTH;
}
}
private String getDelayStringAccelero() {
mDelayStringBuffer.setLength(0);
// Loop over all recorded delays and append them to the buffer as a decimal
for (int i = 0; i < mEventLength; i++) {
if (i > 0) {
mDelayStringBuffer.append(", ");
}
final int index = (mEventData + i) % EVENT_QUEUE_LENGTH;
final String delay = mEventDelaysAccelero[i];
mDelayStringBuffer.append(delay);
}
return mDelayStringBuffer.toString();
}
В показаниях, хранящихся в файлах, отсутствуют некоторые значения акселерометра во время сна, и они сохраняются только в течение 30 секунд после выключения экрана.
Где я должен реализовать методы хранения, чтобы я мог получить все значения акселерометра?