Датчик дозирования в акселерометр - PullRequest
0 голосов
/ 26 июня 2019

Я пытаюсь осуществить дозирование датчика акселерометра и сохранить значения 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 секунд после выключения экрана.

Где я должен реализовать методы хранения, чтобы я мог получить все значения акселерометра?

1 Ответ

0 голосов
/ 26 июня 2019

Для запуска фоновой задачи, даже если приложение не видно, вы должны внедрить Service.

. В нем вы захотите использовать пробуждения от пробуждения. чтобы убедиться, что необходимые вам ресурсы (CPU, ...) остаются доступными.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...