我正在开发一个通过蓝牙发送加速度计生成的数据的应用程序。传感器在ConnectedThread
中实现,并在用户成功连接到远程设备后进行注册。问题是我需要实现AsyncTask
至onClick()
按钮方法,以等待直到从远程设备接收到返回信号。应该使用onPreExecute()
方法取消注册Sensor,然后使用主线程中的onPostExecute()
方法重新注册Sensor。
这是AsyncTask
类的示例,该类在主线程中实现并在onClick()
方法上运行。 Thread.sleep()
模拟等待返回信号。
private class AsyncWait extends AsyncTask <Void, Void, Void> {
@Override
protected Void doInBackground(Void... params) {
synchronized (this){
while(true){
try {
mc_flag = true;
Thread.sleep(3000);
if(mc_flag){
break;
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
return null;
}
@Override
protected void onPreExecute() {
// TODO: unregister listener
dialog2 = ProgressDialog.show(Accelerometer_Activity.this, "Parking", "In progress..", true, false);
}
@Override
protected void onPostExecute(Void result) {
// TODO: register listener
dialog2.dismiss();
mc_flag = false;
}
}
这是ConnectedThread
已实现SensorEventListener
。
私有类Thread_slanje扩展了Thread实现的SensorEventListener {
@Override
public void run() {
sManager = (SensorManager) kontekst.getSystemService(Context.SENSOR_SERVICE);
senzor = sManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
handler_thr = new HandlerThread("AccelerometerLogListener",Thread.NORM_PRIORITY);
handler_thr.start();
handler = new Handler (handler_thr.getLooper());
sManager.registerListener(this, senzor, SensorManager.SENSOR_DELAY_NORMAL, handler);
}
这是killThread()
方法,用于在ConnectedThread中注销侦听器。
private void killThread(){
sManager.unregisterListener(this,senzor);
sManager = null;
if(handler_thr.isAlive()) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2) {
handler_thr.quitSafely();
} else {
handler_thr.quit();
}
}
}
我的问题是,我该如何注册和注销在主线程的ConnectedThread中实现的SensorEventListener,或者有更好的方法来实现这一点?