在我的 Android 应用程序中,我通过蓝牙向/从嵌入式硬件设备发送和接收数据。我使用后台服务来实现这一点。要读取蓝牙数据,我使用下面的代码,
public void run() {
Log.d("DEBUG BT", "IN CONNECTED THREAD RUN");
byte[] buffer = new byte[10240]; //1kb=1024bytes
int begin = 0;
int bytes = 0;
// Keep listening to the InputStream until an exception occurs.
while (true) {
try {
System.out.println("-------------New Data received");
al = new ArrayList<>();
try {
Thread.sleep(300);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
System.out.println("InterruptedException during sleep");
}
// Read from the InputStream.
bytes += mmInStream.read(buffer, bytes, buffer.length - bytes);
for(int i = begin; i < bytes; i++) {
if(buffer[i] == "#".getBytes()[0]) {
// Send the obtained bytes to the UI activity.
bluetoothIn.obtainMessage(1, begin, i, buffer).sendToTarget();
begin = i + 1;
if(i == bytes - 1) {
bytes = 0;
begin = 0;
}
}
}
} catch (IOException e) {
e.printStackTrace();
System.out.println("Problem in reading Data:Input stream was disconnected "+e.getMessage());
Handler hand = new Handler(Looper.getMainLooper());
hand.post(new Runnable() {
@Override
public void run() {
Toast.makeText(BluetoothDataService.this.getApplicationContext(),"Problem in reading Data",Toast.LENGTH_SHORT).show();
dismissDialog();
}
});
break;
}
}
}
我将向我的硬件单元发送查询并通过蓝牙等待数据,但我不知道如何检查超时,我使用进度条直到我收到数据但有时如果我没有收到数据超过 20 秒我需要提醒用户为“超时”,但在我的情况下,进度仍在加载,我被卡住了如何实现这一点,请有人建议如何检查超时