Получение данных с датчиков Android без Слушателей - PullRequest
2 голосов
/ 24 мая 2010

У меня есть следующий код:

public class readSensorsData extends Activity implements SensorListener {


/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    sm = (SensorManager) getSystemService(SENSOR_SERVICE);     

}
@Override   
public void onSensorChanged(int sensor, float[] values) {
    synchronized (this) {
        if (sensor == SensorManager.SENSOR_ORIENTATION) {

        //get orientation       

        }
        if (sensor == SensorManager.SENSOR_ACCELEROMETER) {

         //get acceleration
             }                

        } 
        if (sensor == SensorManager.SENSOR_MAGNETIC_FIELD) {

         //get magnetic fiels
             }     
     Bundle bundle = new Bundle(); //results from activity
     bundle.putFloatArray("acceleration", array);

     Intent mIntent = new Intent();
     mIntent.putExtras(bundle);
     setResult(RESULT_OK, mIntent);
     finish();
        }

  public void onAccuracyChanged(int sensor, int accuracy) {

  }

@Override
protected void onResume() {
    super.onResume();
    sm.registerListener(this, 
            SensorManager.SENSOR_ORIENTATION |
      SensorManager.SENSOR_ACCELEROMETER |
      SensorManager.SENSOR_MAGNETIC_FIELD,
            SensorManager.SENSOR_DELAY_NORMAL);
}

@Override
protected void onStop() {
    sm.unregisterListener(this);
    super.onStop();


  }
}

код работает, но вот моя проблема: когда я вызываю его из основной деятельности следующим образом:

     Intent i = new Intent(this, readSensorsData.class);
  startActivityForResult(i, 1); //1 is for sensors     
     for(int j=0;j<10;j++)
     {
                 //do sth else here!!!!
      try {
        Thread.sleep(1000);
      } catch (InterruptedException e) {e.printStackTrace();}
      //here code for showing result from sensor activity

     } 

тогда я могу 10 раз увидеть результат "делать что-то еще !!!" и когда цикл закончен, я вижу результат от активности. Таким образом, сенсорная активность почему-то ждет, а затем, когда основная деятельность не имеет ничего общего, сенсоры выполняют свою работу.

конечно, я хорошо реализовал: onActivityResult (int requestCode, int resultCode, Intent intent)

Я хочу читать данные сенсора напрямую, без использования слушателей, это возможно?

1 Ответ

2 голосов
/ 24 мая 2010

Во-первых, никогда вызов Thread.sleep() в главном потоке приложения.

Во-вторых, startActivityForResult() является асинхронным. Другое действие не начнется, когда вернется startActivityForResult().

В-третьих, сенсорные события асинхронны.

Итак, сенсорная активность ждет некоторых причина

Он не может запуститься, пока вы не выйдете из основного потока приложения, который связан вашими вызовами Thread.sleep().

тогда, когда основной деятельности нечего датчики делают свою работу.

Точно.

Я хочу читать данные сенсора напрямую, не используя слушателей, это возможно?

Нет. Просто используйте слушателей правильно. Вот три примера проектов , показывающих использование сенсорных прослушивателей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...