单独螺纹中的Acclerometer传感器

use*_*271 3 java android android-sensors

我将数据从Accelerometer Sensor保存到数据库,但我想在一个单独的线程中进行.我试图在互联网上搜索它,但大多数使用相同的线程.请帮忙.我试过的事情: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);
}
Run Code Online (Sandbox Code Playgroud)

我拿了一个SensorEventListener,在一个新的Thread中初始化它,然后用寄存器监听器注册它.

另一种方法:我使用Runnable接口实现了Accelerometer类,在Constructor中初始化了所有内容,因此我的run()方法是空白的,但这种方法不会创建新的Thread.

    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()
   {}
Run Code Online (Sandbox Code Playgroud)

如果我在上述方法中做错了,请建议我任何其他方法.

tec*_*ces 9

首先,您需要使用registerListener(SensorEventListener listener, Sensor sensor, int rate, Handler handler)并提供Handler在后台线程上运行的.

创建一个HandlerThread,获取它Looper,创建一个Handler供应looper.

这将让您在后台线程上收到回调.完成后确保删除侦听器然后调用Looper.quit(),退出线程.