Ist es möglich, ein Timeout in einer inputstream.read() - Funktion von einem BluetoothSocket in Android zu implementieren?Implementieren Sie eine Zeitüberschreitung in BluetoothSocket inputstream.read() in Android
Ich habe versucht mit Thread.sleep(), aber das pausiert nur meine Aktivität.
--- --- Aktualisierung
hatte ich eine Idee, machen 2 Thread-Code herereads (t1 & t2), wobei jeder Thread Interrupt andere, einer von ihnen (t1) machen einen Schlaf (5000), dann unterbrechen der andere Thread (t2), von der anderen Seite der andere Thread (t2) wenn gelesen der Eingangsstrom erkennt ein Zeichen als 0x0D unterbricht den anderen Thread (t1), aber hier ist meine Frage, kann mir jemand helfen? weil ich nicht Interrupt() -Methode von Threads verwendet haben, ich hoffe, jemand kann mir helfen, danke ...
--- --- Aktualisierung
public void run(){
while(true){
try {
char r;
String respuesta = "";
while (true) {
r = (char) mmInStream.read();
respuesta += r;
if (r == 0x3e) {
break;
}
}
respuesta = respuesta.replaceAll(" ", "");
Log.d("respuesta", respuesta);
rHandler.obtainMessage(MESSAGE_READ, -1, -1, respuesta).sendToTarget();
} catch (IOException readException) {
Log.e("ServicioGeneral", "Error de lectura", readException);
this.interrupt();
connectionLost();
// posibly break();
}
}
}
Dies ist meine Implementierung, wenn etwas kommt In einem anderen Thread ist das Problem, dass das Timeout erreicht wird, wenn ich das 0x3e-Zeichen von de mmInStream nicht bekomme.
Ich vermutete, dass ich im zweiten Beispiel eine notifyAll() verwenden muss, aber wann muss ich readThread() starten?
Danke, @weeman
Soweit die API geht, habe ich keine Methode gefunden, die das tut ... Vielleicht gibt es eine reflektierende Möglichkeit, es zu tun ...!? – TacB0sS
Sowohl Bluetooth Socket als auch Inputstream haben keine Methode, um ein Timeout zu implementieren. Das ist mein Problem, das ich mit Threads und Handlern versucht habe, aber noch nicht implementiert werden konnte ... Danke für Ihre Antwort –
Zum Unterdrücken von Leerzeichen in einem String können Sie "Trim()" anstelle von "replaceAll (" "," ")" –