从Android中的配对蓝牙设备读取数据

时间:2012-06-12 12:37:33

标签: android bluetooth

我正在开发一个从配对的蓝牙设备读取数据的android 4.0应用程序。我能够搜索可发现的蓝牙设备并配对设备。但是,我不确定如何通过串口从蓝牙设备读取数据? android系统是否支持SERIAL PORT?因为我在android系统中找不到像COM1或COM2这样的串口。目前,我正在使用BluetoothSocket配对设备。但是,有没有办法从像Windows这样的蓝牙串口读取数据呢?

socket = _devices.get(k).createRfcommSocketToServiceRecord(MY_UUID_SECURE);
socket.connect();

任何帮助表示赞赏!谢谢你。

此致

查尔斯

1 个答案:

答案 0 :(得分:8)

是的。您收到的socket可以为您提供InputStream个实例。如果已连接socket,则您可以读取数据(charStringbyte,具体取决于您将InputStream包围的读者,如果你换一个。)

要使用设备打开串行端口,您必须使用用于创建套接字的UUID中的串行端口配置文件。在网络上抛出一个简单的UUID是

00001101-0000-1000-8000-00805F9B34FB

然后,您可以创建套接字,连接到它,获取流以及使用它们读/写字节。示例:

private static final String UUID_SERIAL_PORT_PROFILE 
                       = "00001101-0000-1000-8000-00805F9B34FB";

private BluetoothSocket mSocket = null;
private BufferedReader mBufferedReader = null;

private void openDeviceConnection(BluetoothDevice aDevice)
        throws IOException {
    InputStream aStream = null;
    InputStreamReader aReader = null;
    try {
        mSocket = aDevice
                .createRfcommSocketToServiceRecord( getSerialPortUUID() );
        mSocket.connect();
        aStream = mSocket.getInputStream();
        aReader = new InputStreamReader( aStream );
        mBufferedReader = new BufferedReader( aReader );
    } catch ( IOException e ) {
        Log.e( TAG, "Could not connect to device", e );
        close( mBufferedReader );
        close( aReader );
        close( aStream );
        close( mSocket );
        throw e;
    }
}

private void close(Closeable aConnectedObject) {
    if ( aConnectedObject == null ) return;
    try {
        aConnectedObject.close();
    } catch ( IOException e ) {
    }
    aConnectedObject = null;
}

private UUID getSerialPortUUID() {
    return UUID.fromString( UUID_SERIAL_PORT_PROFILE );
}

然后,在代码的某处,您可以从读者那里读到:

String aString = mBufferedReader.readLine();

你可以使用OutputStream和各种作家在相反的方向做同样的事情。