用postDelayed和removeCallbacks来进行连接超时操作
方法postDelayed的作用是延迟多少毫秒后开始运行,而removeCallbacks方法是删除指定的Runnable对象,使线程对象停止运行。
先定义mHandler:
private Handler mHandler = new Handler();
private static final int CONN_TIME_OUT = 10000; // 连接超时时间,以毫秒为单位
在需要连接超时判断的地方加入此方法:
mHandler.postDelayed(mTimeoutR, CONN_TIME_OUT);
private Runnable mTimeoutR = new Runnable() {
@Override
public void run() {
//连接超时对话框
showConnTimeOutDialog();
mHandler.removeCallbacks(this);
}
};
在连接成功后的地方加入mHandler.removeCallbacks(mTimeoutR )来取消mTimeoutR中的方法。
// 连接超时对话框
private void showConnTimeOutDialog() {
TipUtils.dismissProgressDialog();
AlertDialog dialog = new AlertDialog.Builder(this)
.setTitle("连接蓝牙失败!")
.setPositiveButton("重新扫描",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog,
int which) {
mHandler.removeCallbacks(mTimeoutR);
}
}).create();
dialog.show();
}