I am writing a small program to send file between Android and PC through bluetooth. I already read the bluetooth chat example in google android site.
Currently, my version works really well with sending a text message via bluetooth, but when I send some files, around >= 20 KB, it stops working and throwing EOFException as below:
java.io.EOFException at java.io.ObjectInputStream$BlockDataInputStream.readFully(ObjectInputStream.java:2716)
at java.io.ObjectInputStream.readArray(ObjectInputStream.java:1665)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1340)
at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1963)
at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1887)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1770)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1346)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:368)
at com.test.pcserver.BluetoothServerListener.run(BluetoothServerListener.java:74)
at java.lang.Thread.run(Thread.java:636)
Currently, my java program on the PC using bluecove-2.1.0
Here are my main codes:
In Android:
// Get the BLuetoothDevice object
if (BluetoothAdapter.checkBluetoothAddress(address)) {
device = mBtAdapter.getRemoteDevice(address);
// Get a BluetoothSocket for a connection with the
// given BluetoothDevice
socket = device .createRfcommSocketToServiceRecord(ProgramConstants.BLUETOOTH_UUID);
socket.connect();
out = new ObjectOutputStream(socket.getOutputStream());
// Send it to PC
out.writeObject(contentObject);
out.flush();
}
In My PC, I read it:
PC Version, server
StreamConnectionNotifier streamConnNotifier = null;
// Create the service url
String connectionString = "btspp://localhost:" + ProgramConstants.BLUETOOTH_UUID.toString()
+ ";name=myappname";
// open server url
streamConnNotifier = (StreamConnectionNotifier) Connector.open(connectionString);
while (true) {
// Wait for client connection
StreamConnection connection = streamConnNotifier.acceptAndOpen();
ObjectInputStream in = new ObjectInputStream(connection.openInputStream());
RemoteDevice dev = RemoteDevice.getRemoteDevice(connection);
// read string from spp client
DataInController data = new DataInController(model);
data.processDataIn(in.readObject(), dev.getBluetoothAddress());
}
Check whether your computer and the Bluetooth device are too far apart. A greater distance between the two devices results in a weaker Bluetooth signal and slower file transmission. 3. If the file is large in size (for example, larger than 100 MB), it is recommended that you use Wi-Fi, USB, or another transfer method.
Can you send large files via Bluetooth? Technically there are no limits to sending files using Bluetooth.
You need to add after flushing the outputstream
out.close();
otherwise the stream can become corrupted.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With