Android藍芽開發的一些經驗

來源:互聯網
上載者:User

標籤:android   bluetooth   

轉載請註明來自:http://blog.csdn.net/icyfox_bupt/article/details/25487125

最近在實驗室做項目,使用了Android的藍芽開發,這裡面有好多坑..所以還是希望能記下來這些東西和大家分享,不要再走我的老路了。

先說一下背景,我是開發手機與帶藍芽的智慧型裝置(藍芽血壓計、血糖計、手環等)裝置對接的APP。也就是說,在裝置端沒有什麼可以操作的,手機負責發起資料轉送。

  1. 藍芽串連,不需要配對

由於被曾經使用藍芽的思路所誤導,一直以為使用藍芽是必須一個配對的過程的。實際上不是這樣。搜尋到裝置以後,直接去connect裝置而不去配對,目前在我這裡是沒問題的,搜尋到裝置以後,可以直接用一下代碼進行串連:

    final String SPP_UUID = "00001101-0000-1000-8000-00805F9B34FB";         UUID uuid = UUID.fromString(SPP_UUID);         BluetoothSocket socket;          socket = device.createInsecureRfcommSocketToServiceRecord(uuid);    adapter.cancelDiscovery();      socket.connect();    這裡的UUID是比較好用的一個,裝置都可以識別。
  1. startDiscovey有可能啟動失敗

    一般程式中會有兩步:開啟藍芽開始尋找裝置。之前我寫的代碼是使用者按下按鈕就直接順序執行這兩步,導致的結果就是經常性搜尋失敗。仔細看了一下API,發現adapter.startDiscovery()函數是有一個boolean返回值的,也就是說如果啟動失敗就返回false。這就解釋了為什麼會啟動失敗了:順序執行了開啟藍芽-尋找裝置的步驟,但是由於藍芽還沒有完全開啟,就開始尋找裝置,導致尋找失敗。於是最後我把代碼改成了這樣,問題解決:

    adapter = BluetoothAdapter.getDefaultAdapter();     if (adapter == null)     {         // 裝置不支援藍芽      }     // 開啟藍芽      if (!adapter.isEnabled())     {         adapter.enable();    adapter.cancelDiscovery();}    // 尋找藍牙裝置,android會將尋找到的裝置以廣播形式發出去      while (!adapter.startDiscovery()){    Log.e("BlueTooth", "嘗試失敗");    try {        Thread.sleep(100);    } catch (InterruptedException e) {        e.printStackTrace();    }}
  2. 接收資料轉換

    使用socket.getInputStream接收到的資料是位元組流,這樣的資料是沒法分析的。又由於一般來說廠家給的協議都是類似於"FA 22 89 D0"這樣的十六進位資料,所以很多情況需要一個byte轉十六進位String的函數:

    public static String bytesToHex(byte[] bytes) {char[] hexChars = new char[bytes.length * 2];for ( int j = 0; j < bytes.length; j++ ) {    int v = bytes[j] & 0xFF;    hexChars[j * 2] = hexArray[v >>> 4];    hexChars[j * 2 + 1] = hexArray[v & 0x0F];}return new String(hexChars);}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.