// 连接蓝牙的线程 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蓝牙连接三部曲
猜你喜欢
转载自zheyiw.iteye.com/blog/2122624
今日推荐
周排行