1. 程式人生 > >Android 藍芽開發,藍芽連印表機。

Android 藍芽開發,藍芽連印表機。

public synchronized void connect(String macAddress, BluetoothDevice device) {
        if (mThread != null) {
            mThread.interrupt();
            mThread = null;
        }
        if (socket != null) {
            try {
                mGpService.closePort(0);
            } catch (Exception e) {
                e.printStackTrace();
            }
            socket = null;
        }
        mThread = new ConnectThread(macAddress, device);
        mThread.start();
    }

    private class ConnectThread extends Thread {
        private BluetoothDevice mmDevice;
        private OutputStream mmOutStream;

        public ConnectThread(String mac, BluetoothDevice device) {
            mmDevice = device;
            String SPP_UUID = "00001101-0000-1000-8000-00805f9b34fb";
            try {
                if (socket == null) {
                    socket = device.createRfcommSocketToServiceRecord(UUID.fromString(SPP_UUID));
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }

        public void run() {
            adapter.cancelDiscovery();
            try {
                Log.i(TAG, "run(MainActivity.java:362)--->> " + "連線socket");
                if (socket.isConnected()) {
                    Log.i(TAG, "run(MainActivity.java:364)--->> " + "已經連線過了");
                } else {
                    if (socket != null) {
                        try {
                            if (mGpService != null) {
                                int state = mGpService.getPrinterConnectStatus(0);
                                switch (state) {
                                    case GpDevice.STATE_CONNECTED:
                                        break;
                                    case GpDevice.STATE_LISTEN:
                                        Log.i(TAG, "run(MainActivity.java:374)--->> " + "state:STATE_LISTEN");
                                        break;
                                    case GpDevice.STATE_CONNECTING:
                                        Log.i(TAG, "run(MainActivity.java:377)--->> " + "state:STATE_CONNECTING");
                                        break;
                                    case GpDevice.STATE_NONE:
                                        Log.i(TAG, "run(MainActivity.java:380)--->> " + "state:STATE_NONE");
                                        registerBroadcast();
                                        mGpService.openPort(0, 4, mmDevice.getAddress(), 0);
                                        break;
                                    default:
                                        Log.i(TAG, "run(MainActivity.java:385)--->> " + "state:default");
                                        break;
                                }
                            } else {
                                Log.i(TAG, "run(MainActivity.java:389)--->> " + "mGpService IS NULL");
                            }
                        } catch (Exception e) {
                            e.printStackTrace();
                        }
                    }
                }
            } catch (Exception connectException) {
                Log.i(TAG, "run(MainActivity.java:397)--->> " + "連線失敗");
                try {
                    if (socket != null) {
                        mGpService.closePort(0);
                        socket = null;
                    }
                } catch (Exception closeException) {

                }
            }
        }
    }

連線狀態的廣播