2013-03-25 134 views
0

我正在審閱一個需要從非安卓設備(例如帶有藍牙適配器的PC)接收數據的場景。我需要顯示自己的用戶界面,並希望通過我的應用程序處理傳入的數據。那麼有沒有什麼好辦法來達到這個目標。從非安卓藍牙設備接收數據的Android代碼

- 編輯

作爲@Trevor在他的回答中提到,下面對沒有任何意義,我只的話題有點經過長期研究,瞭解這一事實。無論如何,感謝所有的建議。

到目前爲止,我嘗試使用listenUsingRfcommWithServiceRecord(...)createRfcommSocketToServiceRecord(...),但通過這種方式,我們需要在兩個設備中運行我們的應用程序。目前它不是我的情況。

- 編輯

那麼,有沒有從非Android設備接收數據沒有什麼好的辦法?

在此先感謝...

Android SDK中樣品中看一看在BluetoothChat
+0

您是否有解決方案,如果有,請發佈您的想法 – Chinnu 2015-01-21 03:47:34

回答

2

你的問題有點含糊因爲當你試圖連接到任何你想使用的藍牙設備時,你還沒有準確解釋發生了什麼問題。你的第二段(「到目前爲止,我試着用listenUsingRfcommWithServiceRecord(...)和createRfcommSocketToServiceRecord(...),但是用這種方式,我們需要在兩個設備上運行我們的應用程序,目前它不是我的情況。」)對我來說沒有意義。但是,我假設它是一個您嘗試連接到的SPP設備(即藍牙串行接口或設置了虛擬COM端口的USB PC藍牙適配器)。在這種情況下,你可以使用藍牙聊天的示例代碼非常多,因爲它是,除了這是使用SPP UUID一個重要的變化:

/** UUID for Serial Port Profile */ 
private static final UUID MY_UUID = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB"); 

順便說一句,如果您使用的藍牙聊天例子如作爲您項目的基礎,請注意我在藍牙聊天代碼中發現的一個錯誤,該錯誤會導致接收到的字符在輸入速度更快的情況下收到任何內容時會丟失。有關這方面的信息,請參閱我在此處給出的答案:Android InputStream dropping first two bytes (modified BluetoothChat)

+0

感謝您的時間@Trevor。我是Android藍牙應用程序開發新手,我第一次瞭解SPP。我還想知道,SPP UUID是否總是與您在代碼示例中提到的相同? – Midhu 2013-03-25 11:36:19

+1

您只能安全使用此UUID與各種SPP藍牙設備進行通信。我在Play上有一個汽車應用程序,它與各種不同的藍牙到串行適配器一起使用,並且此UUID一直很好。另一個需要注意的重要的事情是,對於某些設備,您將需要使用反射方法進行連接。 – Trevor 2013-03-25 11:50:35

0

你需要兩個線程進行通信數據

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(UUID.fromString(SPP_UUID)); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
     mmSocket = tmp; 
    } 

    @Override 
    public void run() { 
     setName("ConnectThread"); 
     mBluetoothAdapter.cancelDiscovery(); 
     try { 
      mmSocket.connect(); 
     } catch (IOException e) { 
      try { 
       mmSocket.close(); 
      } catch (IOException e1) { 
       e1.printStackTrace(); 
      } 
      connectionFailed(); 
      return; 

     } 
     synchronized (PrinterService.this) { 
      mConnectThread = null; 
     } 
     connected(mmSocket, mmDevice); 
    } 

    public void cancel() { 
     try { 
      mmSocket.close(); 
     } catch (IOException e) { 
      Log.e("PrinterService", "close() of connect socket failed", e); 
     } 
    } 
} 

private class ConnectedThread extends Thread { 
    private final BluetoothSocket mmSocket; 
    private final InputStream mmInStream; 
    private final OutputStream mmOutStream; 

    public ConnectedThread(BluetoothSocket socket) { 
     mmSocket = socket; 
     InputStream tmpIn = null; 
     OutputStream tmpOut = null; 
     try { 
      tmpIn = socket.getInputStream(); 
      tmpOut = socket.getOutputStream(); 
     } catch (IOException e) { 
      Log.e("Printer Service", "temp sockets not created", e); 
     } 
     mmInStream = tmpIn; 
     mmOutStream = tmpOut; 
    } 

    @Override 
    public void run() { 
     while (true) { 
      try { 
       if (!encodeData(mmInStream)) { 
        mState = STATE_NONE; 
        connectionLost(); 
        break; 
       } else { 
       } 
       // mHandler.obtainMessage(AbstractActivity.MESSAGE_READ, 
       // bytes, -1, buffer).sendToTarget(); 
      } catch (Exception e) { 
       e.printStackTrace(); 
       connectionLost(); 
       PrinterService.this.stop(); 
       break; 
      } 

     } 
    } 
+0

這是一個在兩個Android設備之間進行通信的例子,這兩個設備都運行相同的應用程序和唯一的UUID。我正在尋求解決方案來接收來自NON-Android設備的數據。所以,我認爲這不是我想要的。但是,感謝您的直接幫助。 – Midhu 2013-03-25 10:19:08

+0

我不認爲這是隻適用於Android設備,我用這個連接我的android手機藍牙打印機和它的工作正常 – 2013-03-25 10:37:18

+0

好吧,然後從我可以得到服務器服務UUID,因爲這裏是'SPP_UUID' 。正如我已經提到的,我將把連接到PC的Bluetoot軟件狗連接到我的Android設備。那麼我可以從哪裏獲得'createRfcommSocketToServiceRecord(...)'的UUID? – Midhu 2013-03-25 10:46:07

1

我發現this link非常有用,它顯示瞭如何發送以及從Arduino接收數據以及從Android接收數據。

+2

請注意,[只有鏈接的答案](http://meta.stackoverflow.com/tags/link-only-answers/info)是不鼓勵的,所以答案應該是搜索解決方案的終點(vs.而另一個引用的中途停留時間往往會隨着時間推移而過時)。請考慮在此添加獨立的摘要,並將鏈接保留爲參考。 – kleopatra 2013-10-07 12:28:20