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)
如果我在上述方法中做错了,请建议我任何其他方法.
首先,您需要使用registerListener(SensorEventListener listener, Sensor sensor, int rate, Handler handler)
并提供Handler
在后台线程上运行的.
创建一个HandlerThread
,获取它Looper
,创建一个Handler
供应looper.
这将让您在后台线程上收到回调.完成后确保删除侦听器然后调用Looper.quit()
,退出线程.
归档时间: |
|
查看次数: |
6292 次 |
最近记录: |