Датчик акклерометра в отдельной резьбе

Я сохраняю данные из датчика акселерометра в базу данных, но я хочу сделать это в отдельном потоке. Я пытался найти его в Интернете, но большинство из них использует одну и ту же ветку. Пожалуйста помоги. Вещи, которые я пробовал: 1)

SenSorEventListener sel;
    Thread A=new Thread(){
                public void run()
                {
                    sel=new SensorEventListener() {

                        @Override
                        public void onSensorChanged(SensorEvent event) {
                            // TODO Auto-generated method stub
                            double Acceleration,x,y,z;
                            x=event.values[0];
                            y=event.values[2];
                            z=event.values[2];
                            Acceleration=Math.sqrt(x*x+y*y+z*z);
                            db.addAccel(Acceleration);
                            Log.d("MESSAGE","SAVED");
                        }

                        @Override
                        public void onAccuracyChanged(Sensor sensor, int accuracy) {
                            // TODO Auto-generated method stub

                        }
                    };
                }
            };
            A.start();
            try {
                A.join();
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            sm.registerListener(sel,s,1000000);
}

Я взял SensorEventListener, инициализировал его в новом потоке и затем зарегистрировал его с помощью слушателя регистра.

Другой подход: я реализовал класс Accelerometer с использованием интерфейса Runnable, инициализировал все в конструкторе, поэтому мой метод run() пуст, но этот подход не создает новый поток.

    Accelerometer(Context con,Database d)
        {   
            sm=(SensorManager)con.getSystemService(Context.SENSOR_SERVICE);
            s=sm.getSensorList(Sensor.TYPE_ACCELEROMETER).get(0);
            sm.registerListener(this,s,1000000);
            db=d;
        }
   void run()
   {}

Пожалуйста, предложите мне другой подход или если я делаю что-то не так в вышеупомянутых подходах.

1 ответ

Решение

Сначала вам нужно использовать registerListener(SensorEventListener listener, Sensor sensor, int rate, Handler handler) и поставить Handler это работает в фоновом потоке.

Создать HandlerThreadхрен Looper, создать Handler поставка петлителя.

Это позволит вам получить обратные вызовы в фоновом потоке. Когда закончите, убедитесь, что вы удалите слушателя, а затем позвоните Looper.quit(), чтобы выйти из потока.

Другие вопросы по тегам