Датчик StepCounter иногда не работает на устройстве SamSung
Я создаю демо с шага получения от перезагрузки, как это.
public class MainActivity extends AppCompatActivity implements SensorEventListener {
private SensorManager sensorManager;
@Override
public void onCreate(Bundle savedInstanceState) {
...
sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
}
@Override
protected void onResume() {
super.onResume();
countSensor = sensorManager.getDefaultSensor(Sensor.TYPE_STEP_COUNTER);
sensorManager.registerListener(this, countSensor, SensorManager.SENSOR_DELAY_UI);
}
@Override
public void onSensorChanged(SensorEvent event) {
if (event.sensor.getType() == Sensor.TYPE_STEP_COUNTER) {
Log.i("TAG","step from reboot" + String.valueOf(event.values[0]));
}
}
}
Но когда я тестирую на своем устройстве (SamSung Galaxy S4), STEP_COUNTER иногда не работает хорошо:(. Я выясняю это по сравнению с SHealth
После многих многих испытаний я нашел
Почти время STEP_COUNTER возвращает шаг, равный SHealth, НО когда-нибудь другой. Поэтому я думаю, что SHealth может использовать другой датчик для подсчета шага, но я не знаю, какой датчик? Я думаю, что это не STEP_DETECTOR, потому что STEP_DETECTOR возвращает очень мало шагов при выключении экрана.
Иногда STEP_COUNTER перестает работать, пока SHealth по- прежнему возвращает шаг, например, я прохожу около 100 шагов => Дисплей SHealth 110 и дисплей 100 демонстрационного приложения, затем я продолжаю идти около 200 шагов => Дисплей 305 SHealth и дисплей 121 демонстрационного приложения (кажется вроде бы прекрати работу)
Я также получаю отчет от многих пользователей с другим устройством (с низким рейтингом:(), но могу воспроизводить его только на своем устройстве.
Я не знаю, как решить эту проблему. Я думаю, что STEP_COUNTER - лучший датчик для шага приема (сравните с STEP_DETECTOR)
Любая помощь или предложение будет с благодарностью.
2 ответа
Мы также сталкивались с этой проблемой, когда использовали стандартные пошаговые датчики телефона. Тем не менее, мы используем TYPE_STEP_DETECTOR - и у нас нет проблемы, которую вы имеете (более 100000 пользователей), так что, возможно, что-то не так? Эта проблема очень похожа на то, что вы не можете полагаться на такой механизм. В нашем случае мы получили много шагов за короткое время. Даже если вы тигр, вы не можете сделать столько шагов.
Дело в том, что Samsung манипулирует ОС, и есть много вещей, которые хорошо работают, например, на устройствах Nexus, НО не на устройствах Samsung. После попытки исправить поведение датчика шага мы выяснили, что нам нужна альтернатива для телефонов Samsung или для телефонов, которые его не поддерживают.
К вашему сведению, мы столкнулись с тем, что некоторые телефоны (в основном Motorola) не имеют пошаговых датчиков в устройстве, поэтому попытка найти датчики возвращает ноль.
SensorManager sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
Sensor stepDetector = sensorManager.getDefaultSensor(Sensor.TYPE_STEP_DETECTOR);
if (stepsDetector != null) {
//Do something
}
Вы можете реализовать свой собственный механизм, используя wakelock и акселерометр (который имеет огромное потребление батареи, будьте осторожны).
Вы отменяете регистрацию датчика, когда выходите из приложения? Согласно документации SDK:
"Если вы хотите непрерывно отслеживать количество шагов в течение длительного периода времени, НЕ отмените регистрацию для этого датчика, чтобы он продолжал подсчитывать шаги в фоновом режиме, даже когда точка доступа находится в режиме ожидания, и сообщать совокупный счет, когда точка доступа проснулся ".
Надеюсь, это поможет...