我正在尝试尽可能优雅地断开与我的蓝牙设备的连接,但 Android 坚持向我抛出系统错误:
09-02 15:16:16.748: W/System.err(31038): java.io.IOException: Operation Canceled
09-02 15:16:16.748: W/System.err(31038): at android.bluetooth.BluetoothSocket.readNative(Native Method)
09-02 15:16:16.748: W/System.err(31038): at android.bluetooth.BluetoothSocket.read(BluetoothSocket.java:333)
09-02 15:16:16.748: W/System.err(31038): at android.bluetooth.BluetoothInputStream.read(BluetoothInputStream.java:60)
09-02 15:16:16.748: W/System.err(31038): at com.bluetooth.BluetoothRemoteControlApp$ConnectedThread.run(BluetoothRemoteControlApp.java:207)
我正在使用 BluetoothChat 示例程序的修改版本,我的连接线程如下所示:
private class ConnectedThread extends Thread {
private final BluetoothSocket mmSocket;
private final InputStream mmInStream;
private final OutputStream mmOutStream;
public ConnectedThread(BluetoothSocket socket) {
mmSocket = socket;
InputStream tmpIn = null;
OutputStream tmpOut = null;
try {
tmpIn = socket.getInputStream();
tmpOut = socket.getOutputStream();
} catch (IOException e) {
e.printStackTrace();
}
mmInStream = tmpIn;
mmOutStream = tmpOut;
connected = true;
}
public void run() {
byte[] buffer = new byte[1024];
int bytes;
byte ch;
while(connected) {
try {
bytes = 0;
while((ch = (byte) mmInStream.read()) != '\n')
{
buffer[bytes++] = ch;
}
busy = false;
String msg = new String(buffer, "UTF-8").substring(0, bytes - 1);
Log.d(TAG, "Read: " + msg);
if(activityHandler != null) {
activityHandler.obtainMessage(BT_READ, bytes, 0, msg).sendToTarget();
}
}
catch(IOException e) {
//e.printStackTrace();
Log.w(TAG, "Cancelling");
break;
}
}
}
public void write(byte[] buffer) {
// . . .
}
public void cancel() {
Log.i(TAG, "Cancelling connected thread");
try {
mmSocket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
在断开连接期间,我调用了引发系统错误的取消方法。我应该担心并尝试解决它吗?我真的不喜欢在我的日志上看到错误...