当前位置: 首页 > 面试题库 >

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

赫连实
2023-03-14
问题内容

我正在将数据从加速计传感器保存到数据库,但是我想在一个单独的线程中进行处理。我试图在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,在新线程中对其进行了初始化,然后在注册侦听器中对其进行了注册。

另一种方法:我使用Runnable接口实现了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()退出线程。



 类似资料:
  • 使用coreMotion,实现一个小球在一个框内根据iPhone的倾斜方向和倾角大小以相应的加速度运动。 [Code4App.com]

  • 更新时间:2018-09-17 12:24:57 功能说明 加速度传感器驱动。adxl345 是一款具有数字加速度计功能低功耗传感器,分辨率可以达到13bit,测量范围在16g,通过 I2C 或 SPI 协议进行数据交互. 硬件资源 DevelopKit 上有 I2C 的外扩端口,同时也需要额外的 adxl345 模块,所需的硬件资源如图1所示: 图1 DevelopKit 外扩的 I2C 各个引

  • 更新时间:2018-09-18 10:16:33 功能说明 加速度传感器驱动。MAG3110 是一款低功耗的加速度传感器。 硬件资源 1.DevelopKit 开发板 2.MAG3110 模块 3.接线 MAG3110模块 SCL 引脚接 DevelopKit I2C2的SCL引脚 MAG3110模块 SDA 引脚接 DevelopKit I2C2的SDA引脚 MAG3110模块 VCC引脚接 D

  • 更新时间:2018-09-18 10:15:26 功能说明 加速度传感器的驱动程序 硬件资源 1.DevelopKit 开发板 2.HMC5883 模块 3.接线 HMC5883 模块 SCL 引脚接 DevelopKit I2C2 的 SCL 引脚 HMC5883 模块 SDA 引脚接 DevelopKit I2C2 的 SDA 引脚 HMC5883 模块 VCC 引脚接 DevelopKit

  • 现在一些移动设备配备有加速度传感器,我们可以通过监听它的事件获取各方向的加速度。 可以设想要完成一个游戏情景:通过来回移动手机,平衡小球在手机中的位置。这种场景的完成,就需要监听加速度传感器事件。 使用加速度传感器,需要先启用 Device::setAccelerometerEnabled(true); 创建加速度传感器监听器: // creating an accelerometer even

  • 本文向大家介绍unity3d 读取加速度传感器(精度),包括了unity3d 读取加速度传感器(精度)的使用技巧和注意事项,需要的朋友参考一下 示例 仔细阅读加速度传感器。 本示例分配内存: 这个例子确实没有分配内存: 请注意,这未过滤。请在此处查看如何平滑加速度计值以消除噪声。