1

Можно ли получить значения акселерометра Android внутри метода onCreate? Я хочу это, , чтобы сделать некоторые инициализации после их прочтения. До сих пор я зарегистрировал прослушиватель датчиков, чтобы получить эти значения при их изменении через обратный вызов onSensorChanged . У меня есть 3 атрибута float (lastx, lasty и lastz), инициализированный до -1, чтобы сохранить значения акселерометра там после изменения. В методе onCreate, после регистрации моего прослушивателя сенсора, я пытаюсь проверить эти значения, но они всегда равны -1. Есть ли способ получить эти значения внутри метода onCreate?Можно ли получить значения акселерометра Android внутри метода onCreate?

Вот мой код:

public class MainActivity extends Activity implements SensorEventListener { 
    private SensorManager sensorManager; 

    TextView textView; 
    StringBuilder builder = new StringBuilder(); 
    float lastx = -1; 
    float lasty = -1; 
    float lastz = -1; 

    @Override 
    public void onCreate(Bundle savedInstanceState){ 

     super.onCreate(savedInstanceState); 
     textView = new TextView(this); 

     SensorManager manager = (SensorManager) 
        getSystemService(Context.SENSOR_SERVICE); 

     Sensor accelerometer = manager.getDefaultSensor(
            Sensor.TYPE_ACCELEROMETER); 

     if(!manager.registerListener(this, accelerometer, 
            SensorManager.SENSOR_DELAY_GAME)){ 
     Log.d("ERROR: ", "NO accelerometer found!"); 
     } 

     setContentView(textView); 
     builder.setLength(0); 

     builder.append(
      "X " + this.lastx + "\nY " + this.lasty + "\nZ " + this.lasty); 
     textView.setText(builder.toString()); 

     Log.d(" * accelerometer values:", 
      "X: " + this.lastx+", Y: " + this.lasty + ", Z: " + this.lastz); 

    } 

    public void onAccuracyChanged(Sensor sensor,int accuracy){ 

    } 

    public void onSensorChanged(SensorEvent event){ 

      // check sensor type 
      if(event.sensor.getType()==Sensor.TYPE_ACCELEROMETER){ 

       // assign directions 
       float x=event.values[0]; 
       float y=event.values[1]; 
       float z=event.values[2]; 

       this.lastx = x; 
       this.lasty = y; 
       this.lastz = z; 

       // builder.setLength(0); 
       // builder.append("X " + x + "\nY " + y + "\nZ " + z); 
       // textView.setText(builder.toString()); 
     } 
    } 
} 
+0

«Я хочу, чтобы сделать некоторые инициализации после их чтения» - поместите свои инициализации в 'onSensorChanged()'. – CommonsWare

ответ

1

Я думаю, что основной пользовательский интерфейс поток используется для обоих onCreate и onSensorChanged. Таким образом, onSensorChanged не может работать до onCreate. Какую бы инициализацию вам ни понадобилась, я предлагаю вам организовать ее для первого звонка до onSensorChanged, например. выполнив инициализацию, если значения равны -1.

+0

Да, спасибо. Я уже думал об этом решении, и я уверен, что он работает. Но мне любопытно, можно ли получить эти значения изнутри функции 'onCreate', даже в некоторых других, возможно, из-за взлома. –

+0

Любой такой метод не будет использоваться через 'onSensorChanged' для объяснения потоков, о котором я упоминал. Если есть такой метод, то я не знаю об этом. Кроме того, если телефон движется даже немного (что вполне вероятно, если кто-то только что запустил ваше приложение, потому что он будет держать устройство), то значения акселерометра, которые вы увидите, сильно изменчивы. Поэтому мне трудно представить, какую полезную инициализацию вы хотите сделать на основе того, что будет выглядеть почти случайным образом. – Stochastically

+0

Хорошо, да, у вас есть абсолютно все. Я буду ждать немного больше. Если нет другого ответа, я помету ваш как правильный. Спасибо за ваше время! –