Yes there is. The socket
you receive can give you an InputStream
instance. If the socket
is connected, you can then read data (char
, String
or byte
, depending on what reader you will wrap around your InputStream
, if you wrap one).
To open a serial port with the device, you have to use the Serial Port Profile in the UUID you use to create your socket. A simple UUID thrown around on the web is
00001101-0000-1000-8000-00805F9B34FB
You can then create your socket, connect to it, get streams and read/write bytes with them. Example :
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 );
}
And then, somewhere in your code you can read from the reader:
String aString = mBufferedReader.readLine();
And you can do the same thing in opposite direction using OutputStream
and various writers.