Reputation: 281
I am working on an android 4.0 application which reads data from the paired bluetooth device. I am able to search discoverable bluetooth device and pair the devices. However, I am unsure of how to read data from Bluetooth device via serial port? Does android system support SERIAL PORT? Because I cannot find the serial port like COM1 or COM2 in the android system. At the moment, I am using the BluetoothSocket to pair the device. However, is there any way to read data from Bluetooth serial port like Windows does?
socket = _devices.get(k).createRfcommSocketToServiceRecord(MY_UUID_SECURE);
socket.connect();
Any helps appreciated! Thanks in adance.
Regards,
Charles
Upvotes: 6
Views: 20986
Reputation: 1247
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.
Upvotes: 10