java - 单独线程中的加速度计传感器

标签 java android android-sensors

我正在将数据从加速计传感器保存到数据库,但我想在一个单独的线程中进行。我试图在 Internet 上搜索它,但大多数都使用相同的线程。

我尝试过的事情:

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,在一个新的 Thread 中初始化它,然后用 register listener 注册它。

另一种方法: 我使用 Runnable 接口(interface)实现了 Accelerometer 类,在 Constructor 中初始化了所有内容,所以我的 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()
   {}

我很乐意尝试另一种方法,或者听说我在上述方法中做错了什么。

最佳答案

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

创建一个 HandlerThread , 得到它的 Looper , 创建一个 Handler提供活套。

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

关于java - 单独线程中的加速度计传感器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17513352/

相关文章:

android - Android 应用程序中的设计建议

android - Rajawali 旋转相机与 Sensor.TYPE_ROTATION_VECTOR 奇怪的行为

java - 检测口袋中的设备是否存在

java - if else -if 意外消息

java - 在一次定时器操作中更新标签两次

java - 作为字节数组而不是字符串接收的 MQ 消息

java - Robotframework.request - 如何发出内容为 “multipart/form-data” 和键值的 POST 请求

android - 从 Google Play 下载后应用无法运行

android - 如果应用程序正在运行,则在 BroadcastReceiver 中显示对话框

android - tabLayout中如何从不同的fragments中传输数据?