2013-03-25 73 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