android蓝牙连接三部曲
// 连接蓝牙的线程 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"); } } }
相关推荐
80296330 2020-09-15
SeetyST 2020-08-13
张俊杰 2020-08-02
浅梦墨汐 2020-07-28
北落不吉 2020-06-27
棋牌游戏开发 2020-06-11
greenpepper 2020-06-11
greenpepper 2020-06-13
seek 2020-06-10
dotstar 2020-06-02
hushijiao 2020-05-17
浅梦墨汐 2020-05-12
chinaycheng 2020-05-06
sixforone 2020-05-06
海豚的成长日记 2020-05-04
greenpepper 2020-04-29
greenpepper 2020-04-22
海豚的成长日记 2020-01-12