Невозможность изменить скорость акселерометра
-
28-10-2019 - |
Вопрос
Я должен собирать данные акселерометра с моего телефона Android, поэтому я сделал небольшую программу для этого.
После некоторых испытаний я обнаружил, что скорость моего акселерометра моего Nexus всегда 50 значений в секунду, когда телефон активен, и 6 значений в секунду, когда он спит (с PARTIAL_WAKE_LOCK
), какой бы ни был показатель, который я просил (NORMAL
, UI
, GAME
или же FASTEST
).
Поэтому я решил установить приложение, найденное в Интернете, которое проверяет скорость акселерометра: http://samoht.fr/tuto/accelerometers-fretress-on-anddroid-with-code
Но я получил ту же «ошибку»: какую бы скорость я ни просил, это всегда 50 значений в секунду, когда телефон активен.
Я не понимаю, почему мой телефон ведет себя таким образом. Это проблема :
- Связано с Nexus s?
- специфичный для моего телефона?
- Связано с Android 4?
РЕДАКТИРОВАТЬ : Я проверил программу на другом Nexus S (Android 4), и у меня такая же проблема. Таким образом, это, кажется, исключает одну из перечисленных выше возможностей: это не связано только с моим телефоном.
Решение
Я провел несколько тестов на разных смартфонах. Вот результаты:
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-ccelerometers-creen-off
Другие советы
Не подключайте свой телефон к ПК через USB во время получения данных, потому что во время данных регистрируется только на SD -карте. Когда телефон подключен к ПК через USB -файл, можно сохранить на SD -карте.
Так что попробуйте отключить USB при сборе данных.
К сожалению, как предложено в других ответах, задержка (или скорость отбора проб, которую вы устанавливаете Режимы (выключение процессора и т. Д.). Одним из способов, которым я смог получить несколько хорошую скорость отбора проб, была запись моих данных из службы, что сделало услугу службой переднего плана и имела блокировку питания с флагом 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);
Приведенный выше код делает Сервис приоритетом для ОС в отличие от обычной службы. Например, примеры службы переднего плана - музыкальные игроки.
С помощью этого кода я смог получить частоту отбора проб, который мне нужен, даже после того, как часы автоматически выключают экран.
Проверьте это приложение, у нас есть фиксированная частота отбора проб на 14-15, независимо от модели устройства https://market.android.com/details?id=singh.pal.ajeet&feature=search_result#?t=w251bgwsmswxldesinnpbmdolnbhbc5hamvldcjdЗа любую помощь по почте нам по почте по адресу developer.virtuoid@gmail.com