gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 11:58:45 26 4
gpt4 key购买 nike

我正在将数据从加速计传感器保存到数据库,但我想在一个单独的线程中进行。我试图在 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com