// 连接蓝牙的线程
private class AcceptThread extends Thread {
private final BluetoothServerSocket mmServerSocket;
public AcceptThread() {
BluetoothServerSocket tmp = null;
try {
tmp = BlueToothService.this.adapter.listenUsingRfcommWithServiceRecord("BTPrinter",
BlueToothService.MY_UUID);
} catch (IOException e) {
Log.e(BlueToothService.this.TAG, "listen() failed", e);
}
this.mmServerSocket = tmp;
}
public void run() {
if (BlueToothService.this.D.booleanValue())
Log.d(BlueToothService.this.TAG, "BEGIN mAcceptThread" + this);
setName("AcceptThread");
BluetoothSocket socket = null;
while (BlueToothService.this.mState != 3) {
try {
socket = this.mmServerSocket.accept();
} catch (IOException e) {
break;
}
if (socket != null)
synchronized (BlueToothService.this) {
switch (BlueToothService.this.mState) {
case 1:
case 2:
BlueToothService.this.connected(socket, socket.getRemoteDevice());
break;
case 0:
case 3:
try {
socket.close();
} catch (IOException localIOException1) {
}
}
}
}
}
public void cancel() {
if (BlueToothService.this.D.booleanValue())
Log.d(BlueToothService.this.TAG, "cancel " + this);
try {
this.mmServerSocket.close();
} catch (IOException e) {
Log.e(BlueToothService.this.TAG, "close() of server failed", e);
}
}
}
// 连接中的线程
private class ConnectThread extends Thread {
private final BluetoothSocket mmSocket;
private final BluetoothDevice mmDevice;
public ConnectThread(BluetoothDevice device) {
this.mmDevice = device;
BluetoothSocket tmp = null;
try {
tmp = device.createRfcommSocketToServiceRecord(BlueToothService.MY_UUID);
} catch (IOException e) {
Log.e(BlueToothService.this.TAG, "create() failed", e);
}
this.mmSocket = tmp;
}
public void run() {
Log.i(BlueToothService.this.TAG, "BEGIN mConnectThread");
setName("ConnectThread");
BlueToothService.this.adapter.cancelDiscovery();
BlueToothService.this.SetScanState(1);
try {
this.mmSocket.connect();
BlueToothService.this.connectionSuccess();
} catch (IOException e) {
BlueToothService.this.connectionFailed();
try {
this.mmSocket.close();
} catch (IOException e2) {
Log.e(BlueToothService.this.TAG, "unable to close() socket during connection failure", e2);
}
BlueToothService.this.start();
return;
}
synchronized (BlueToothService.this) {
BlueToothService.this.mConnectThread = null;
}
BlueToothService.this.connected(this.mmSocket, this.mmDevice);
}
public void cancel() {
try {
this.mmSocket.close();
} catch (IOException e) {
Log.e(BlueToothService.this.TAG, "close() of connect socket failed", e);
}
}
}
// 连接之后的线程
private class ConnectedThread extends Thread {
private final BluetoothSocket mmSocket;
private final InputStream mmInStream;
private final OutputStream mmOutStream;
private boolean isCancle = false;
public ConnectedThread(BluetoothSocket socket) {
Log.d(BlueToothService.this.TAG, "create ConnectedThread");
this.mmSocket = socket;
InputStream tmpIn = null;
OutputStream tmpOut = null;
this.isCancle = false;
try {
tmpIn = socket.getInputStream();
tmpOut = socket.getOutputStream();
} catch (IOException e) {
Log.e(BlueToothService.this.TAG, "temp sockets not created", e);
}
this.mmInStream = tmpIn;
this.mmOutStream = tmpOut;
}
public void run() {
Log.i(BlueToothService.this.TAG, "BEGIN mConnectedThread");
while (!this.isCancle)
try {
byte[] buffer = new byte[1];
int bytes = this.mmInStream.read(buffer);
if (bytes > 0) {
BlueToothService.this.SetPrinterType(2);
if (buffer[0] != 17) {
BlueToothService.this.SetWriteState(3);
} else {
BlueToothService.this.SetWriteState(2);
}
} else {
Log.e(BlueToothService.this.TAG, "disconnected1");
BlueToothService.this.connectionLost();
this.isCancle = true;
}
} catch (IOException e) {
Log.e(BlueToothService.this.TAG, "disconnected2", e);
BlueToothService.this.connectionLost();
this.isCancle = true;
}
}
public void write(byte[] buffer) {
try {
this.mmOutStream.write(buffer);
Log.i("BTPWRITE", new String(buffer, "GBK"));
BlueToothService.this.mHandler.obtainMessage(3, -1, -1, buffer).sendToTarget();
} catch (IOException localIOException) {
}
}
public void cancel() {
try {
this.isCancle = true;
this.mmSocket.close();
Log.d(BlueToothService.this.TAG, "562cancel suc");
BlueToothService.this.setState(1);
} catch (IOException e) {
Log.d(BlueToothService.this.TAG, "565cancel failed");
}
}
}
android蓝牙连接三部曲
最新推荐文章于 2024-09-21 14:23:15 发布