Archived:Using Bluetooth serial port in MIDlets on S80 and S60 2nd Edition (Known Issue)
The article is believed to be still valid for the original topic scope.
Article Metadata
Tested with
Nokia 6620, Nokia 6260, Nokia 6670, Nokia 7610
Nokia 9300, Nokia 9500
Compatibility
S60 2nd Edition, Feature Pack 1
Series 80 2nd Edition
Article
Contents |
Overview
Reading incoming stream does not work properly in certain Nokia S60 and Series 80 devices.
Description
When the Bluetooth Serial Port Profile (RFCOMM protocol) is used, reading incoming stream is sometimes interrupted with IOException. The read() method of the InputStream class may throw an IOException if the other end has closed the stream while the InputStream is still reading it.
Another issue is that the InputStream cannot use a bigger byte array than 512 bytes when reading stream. A bigger byte array may crash the MIDlet.
How to reproduce
Run, for example, the BtsppEcho example application.
Solution
Solution to the IOException issue: Ensure that the InputStream.read() has finished before closing the output stream in the other end.
Solution to the stream size issue: Do not use a bigger byte array than 512 bytes. Read the input stream in a loop or keep the whole length of the stream under 512 bytes.
Generic workaround to both issues: Use L2CAP connection instead of SPP (RFCOMM), if appropriate. This is feasible when you have access to the L2CAP protocol in both ends of your application (for example, connections between two devices).


Thread.yield() helps me…