天天看點

android 藍牙的那些坑

本來想開發一款藍牙軟體,因為網上已經有各種教程,是以本來是沒必要繼續開一編文章來說些什麼的,但是親自體驗過後發現,實際上Android與Android之間的藍牙通訊實在有不少坑,唯有自己總結一下并記錄下來

//采用端口進行連結,這裡值得注意的是,網上基本上第二個參數都表示1,其實這個數值可以是1-30,表示通過1-30之間的某個端口來進行連接配接

Device.getClass().getMethod("createRfcommSocket", new Class[]{int.class}); method.invoke(device, );
           

如果手機之間通過藍牙通信,那麼必須伺服器先以UUID來建立,用戶端才可以用createRfcommSocketToServiceRecord…..UUID來連結獲得socket,否則永遠timeout,除非使用上述的端口連接配接,既然使用藍牙端口連接配接,那麼同樣的道理服務端也應使用端口建立

常用的伺服器名:bpssp

手機作為伺服器的話,

soctet.getInputStream()

會累積所有未接收的資料流緩存

藍牙多機連結的話,允許6-8台機器對伺服器進行連接配接,此時伺服器應存在一條線程專門負責接收其他機器的連結資訊,另一條線程負責處理對應機器的業務

class OtherServer implements Runnable {
        @Override
        public void run() {
            try {
                createLog("createing server");
                bluetoothAdapter =     BluetoothAdapter.getDefaultAdapter();
                serverSoctet = bluetoothAdapter.listenUsingRfcommWithServiceRecord("btspp", UUID.fromString(uuid));
                while (true) {
                    createLog("waiting connection");
                    BluetoothSocket soctet = serverSoctet.accept();
                    new Thread(new ServerThread(soctet)).start();
                }
            } catch (Exception e) {

            }
        }
    }
           

親測4.0的藍牙傳輸距離在無障礙的環境下,可以達到數十米