Я читаю необработанное ускорение с аппаратного датчика и подсчитываю количество раз, которое датчик считывается в секунду.
Ниже приведен очень простой пример того, что я делаю.Я получаю датчик в onCreate()
и регистрирую слушателя в onResume()
, где я выбираю предпочтительную частоту опроса, в данном случае SENSOR_DELAY_FASTEST
(я знаю, что это всего лишь предложение и может быть изменено ОС).В onSensorChanged()
я проверяю, действительно ли событие происходило от акселерометра.Здесь у меня есть небольшой фрагмент, который подсчитывает и регистрирует количество выборок в секунду.
Вот часть, которую я не понимаю: на Galaxy S10 (Android 9.0) я получаю 6 выборок в секундунезависимо от выбранной частоты опроса .На других устройствах, таких как Huawei Honor, Galaxy S5, я получаю 50 выборок в секунду с SENSOR_DELAY_GAME
и быстрее с SENSOR_DELAY_FASTEST
.Есть ли способ, которым я могу повлиять на это?6 выборок в секунду слишком мало для моего приложения.
Я уже отключил оптимизацию приложения для этого приложения на своем устройстве.Это не решило мою проблему.Стоит отметить, что гироскоп обновляется 100 раз в секунду на этом устройстве.
public class MainActivity extends AppCompatActivity implements SensorEventListener{
private SensorManager sensorManager;
private Sensor accelerometer;
private int samples, times;
private long previousTime;
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
sensorManager = (SensorManager)getSystemService(SENSOR_SERVICE);
accelerometer = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
previousTime = System.currentTimeMillis();
}
protected void onResume(){
super.onResume();
sensorManager.registerListener(this, accelerometer, SensorManager.SENSOR_DELAY_FASTEST);
}
protected void onPause(){
super.onPause();
sensorManager.unregisterListener(this);
}
public void onSensorChanged(SensorEvent event){
if(event.sensor.getType() == Sensor.TYPE_ACCELEROMETER){
samples++;
if(previousTime + 1000 <= System.currentTimeMillis()){
Log.i("MainActivity", String.valueOf(samples/times));
times++;
previousTime = System.currentTimeMillis();
}
}
}
}