Невозможно изменить скорость акселерометра - PullRequest
3 голосов
/ 20 февраля 2012

Мне нужно собрать данные акселерометра с моего телефона Android, поэтому я сделал небольшую программу для этого.

После некоторых испытаний я обнаружил, что скорость моего акселерометра Nexus S равна всегда 50 значений в секунду, когда телефон активен, и 6 значений в секунду, когда он спит (с PARTIAL_WAKE_LOCK), независимо от скорости, которую я запрашиваю (NORMAL, UI, GAME или FASTEST).

Поэтому я решил установить найденное в Интернете приложение, которое проверяет скорость акселерометра: http://samoht.fr/tuto/accelerometers-frequency-on-android-with-code

Но я получил ту же «ошибку»: независимо от скорости, с которой яспросите, это всегда 50 значений в секунду, когда телефон активен.

Я не понимаю, почему мой телефон ведет себя так.Это проблема:

  • связана с Nexus S?
  • специфична для моего телефона?
  • связана с Android 4?

РЕДАКТИРОВАТЬ : я протестировал программу на другом Nexus S (Android 4), и у меня та же проблема.Таким образом, кажется, что исключена одна из перечисленных выше возможностей: она относится не только к моему телефону.

Ответы [ 4 ]

6 голосов
/ 17 марта 2012

Я провел несколько тестов на разных смартфонах.Вот результаты:

Samsung Galaxy Teos
-------------------
* When awake
    Normal: 4.17 Hz
    UI: 8.43 hz
    Game: 16.93 Hz
    Fastest: 109.42 Hz

* When asleep
    The phone sends null values (0), whatever the mode I chose


Samsung Nexus S
---------------
* When awake
    Normal: 49.51 Hz
    UI: 49.51 hz
    Game: 49.51 Hz
    Fastest: 49.51 Hz

* When asleep
    6.06 Hz, whatever the mode I chose

LG Nexus 5
----------
* When awake
    Normal: 15.39 Hz
    UI: 15.4 Hz
    Game: 50.05 Hz
    Fastest: 196.74 Hz

* When asleep
    Normal: 4.96 Hz
    UI: 15.41 Hz
    Game: 50.12 Hz
    Fastest: 198.53 Hz

LG Nexus 4
----------
* When awake
    Normal: 15.75 Hz
    UI: 15.74 Hz
    Game: 48.86 Hz
    Fastest: 195.85 Hz

* When asleep
    Normal: 5.5 Hz
    UI: 15.74 Hz
    Game: 49.16 Hz
    Fastest: 196.75 Hz


Samsung Galaxy Nexus
--------------------
* When awake
    Fastest: 125 Hz

* When asleep
    It sends data


Samsung Galaxy Note 2
---------------------
* When awake
    Fastest: 100 Hz

* When asleep
    The phone does not send anything


Samsung Galaxy S3 and S3 Mini
-----------------------------
* When awake
    Fastest: 100 Hz

* When asleep
    Fastest: 100 Hz


HTC Wildfire
------------
* When awake
    Normal: 4 Hz
    UI: 12 hz
    Game: 22.2 Hz
    Fastest: 38.40 Hz

* When asleep
    The phone does not send anything, whatever the mode I chose


HTC Desire
----------
* When awake
    Normal: 4.36 Hz
    UI: 11.9 hz
    Game: 23.3 Hz
    Fastest: 47.27 Hz

* When asleep
    The phone does not send anything, whatever the mode I chose

Обратите внимание, что тесты были выполнены с использованием частичной блокировки следа.Без него Nexus S вообще не предоставляет никаких данных, когда он спит.

Существует также полезный список смартфонов, акселерометры которых отправляют (или не) совместимые данные во время сна: http://www.saltwebsites.com/2012/android-accelerometers-screen-off

3 голосов
/ 07 марта 2012

Не подключайте телефон к ПК через USB во время сбора данных, поскольку во время сбора данных данные регистрируются только на SD-карте.Когда телефон подключен к ПК через USB, файл не может быть сохранен на SD-карте.

Поэтому попробуйте отключить USB во время сбора данных.

1 голос
/ 21 июля 2015

К сожалению, как показывают другие ответы, установленная вами задержка (или частота дискретизации) является всего лишь предложением (для системы) минимума, требуемого вашим приложением, однако, это может кардинально измениться в зависимости от запущенных других приложений или входа вашего устройствав режимах энергосбережения (выключение процессора и т. д.).Один из способов получить хорошую частоту дискретизации - записать мои данные из службы, сделать службу приоритетной и иметь блокировку питания с флагом PARTIAL_WAKE_LOCK.

Я поместил код в эту суть https://gist.github.com/julian-ramos/6ee7ad8a74ee4b442530

В этой сути гораздо больше кода, чем вам нужно, но просто обратите внимание на следующие два метода

@Override
    public int onStartCommand(Intent intent, int flags, int startId) {
//        //Power management
        PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
        wl = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "My Tag");
        wl.acquire();
.....}

Приведенный выше код запрещает ОС отключать процессор

Теперь, чтобы сделать эту службу приоритетной службой

NotificationCompat.Builder notificationBuilder =
                new NotificationCompat.Builder(getApplicationContext())
                        .setContentTitle("Title")
                        .setContentText("hola")
                        .setContentIntent(viewPendingIntent);



        NotificationManagerCompat notificationManager = NotificationManagerCompat.from(this);

        not=notificationBuilder.build();
        notificationManager.notify(notificationId,not );
        startForeground(notificationId, not);

Приведенный выше код делает службу приоритетной для ОС в отличие от обычной службы.Примерами службы переднего плана являются, например, музыкальные проигрыватели.

С помощью этого кода я смог получить необходимую частоту дискретизации даже после автоматического выключения часов.

0 голосов
/ 29 февраля 2012

проверить это приложение мы установили частоту дискретизации на 14-15 независимо от модели устройства https://market.android.com/details?id=singh.pal.ajeet&feature=search_result#?t=W251bGwsMSwxLDEsInNpbmdoLnBhbC5hamVldCJd за любую помощь, напишите нам на developer.virtuoid@gmail.com

...