Я осматриваюсь и с 2016 года нашел отчеты о том, что в WearOS не имеет значения код, который вы пытаетесь здесь:
mSensorManager.registerListener (this, mAcceSensor, 50000, 50000);
Неважно, используете ли вы
mSensorManager.registerListener(this, mAcceSensor, SensorManager.SENSOR_DELAY_UI);
или mSensorManager.registerListener (this, mAcceSensor, SensorManager.SENSOR_DELAY_FASTEST);
или мой код, это всегдаиспользует самую быструю возможную частоту дискретизации, около 100 Гц.
Galaxy Nexus: частота выборки датчика увеличивается при выборке большего количества датчиков
частота выборки датчика Android выиграна 't дроу ниже 60 Гц
В конце я выбрал унылый способ:
@Override
public void onSensorChanged(SensorEvent sensorEvent) {
nowDate = new Date();
if(sensorEvent.sensor.getType() == Sensor.TYPE_ACCELEROMETER){
String msg = Float.toString(sensorEvent.values[0]) +","+ Float.toString(sensorEvent.values[1]) +","+ Float.toString(sensorEvent.values[2]);
if (isOn && (nowDate.getTime() -startDate.getTime()) >= 40){
startDate = nowDate;
String timeStamp = dateFormat.format(nowDate);
msg = msg +","+timeStamp;
new SendThread(datapath, msg).start();
}
}
}
Это работает, это не идеально, но работает достаточно хорошо.Кажется, что не имеет значения, какое значение я выбрал в условии if, я пробовал 40, 50 и 60, и все почти идеально работают на 16-17 Гц.Я также попытался перейти с SENSOR_DELAY_UI на SENSOR_DELAY_FASTEST и получаю одинаковые результаты, 16-17 Гц, поэтому выбор не имеет значения.
Надеюсь, это поможет кому-то с такой же проблемой, и если естьболее стильный способ, я буду читать.