Good day.
I was able to create a stable connection to the BT device.
To do this, I changed your code:
BluetoothSocket btsocket =
btdev.createRfcommSocketToServiceRecord(uuid);
btsocket.connect();
Upon:
int RFCOMM_CHANEL = 1; //SPP chanel
Method m = btdev.getClass().getMethod("createRfcommSocket", new
Class[] { int.class });
BluetoothSocket connection = (BluetoothSocket) m.invoke(btdev,
RFCOMM_CHANEL);
connection.connect();
And now the connection has been stable and not broken and you can read
and receive data by input and output streams.
On 16 янв, 02:48, Sean Liao <[email protected]> wrote:
> Anyone look into or experienced the same problem using the role switch
> feature? I think this may be a bug on the android sdk:
>
> If android bt advertise it support role switch and it should fullfil the
> request from remote device. Or, it should simply advertise that it doesn't
> support role switch so the remote device would not request role switch?
>
> is that how it suppose to work? comments?
>
> On Mon, Nov 30, 2009 at 11:36 AM, Sean Liao <[email protected]> wrote:
> > We hooked up a BT protocol analyzer to monitor why connection getting
> > dropped right after connection. We are certain it is due to "Role Switch".
> > By disable role switch, I have successfully established connection, read
> > and write.
>
> > The behavior seems not right, and I think there may be a problem on my
> > Android phones. The following is what I observed from the protocol
> > analyzer:
>
> > 1. Android makes a connection to remote device. It is succesful.
> > 2. Remote device requests "Role Switch".
> > => Android "must" response yes (I believe, otherwise, connection
> > would just stay and no further steps shall take place)
>
> > 3. Android immediately disconnects the above connection.
> > 4. The remote device attempts to establish a connection to my Android
> > phone, it fails. I can see the remote device trying to negotiate connection
> > rate but eventually giving up.
>
> > The above I believe 3 and 4 are the steps when role switch taken place. I
> > could be wrong but by disable role switch on remote device, the connection
> > is fairly robust.
>
> > May I request "role switch" feature for next release?
>
> > Best regards,
> > Sean
>
> > On Tue, Nov 24, 2009 at 12:45 PM, Sean Liao <[email protected]>wrote:
>
> >> Hi, I wrote a simple test driver to test the bluetooth apis. Anyone can
> >> verify whether I am using the API correctly? Everything seems good but no
> >> data read :-(
>
> >> ===========================================================================
> >> // before calling the following, inquiry scan successfully returned, and
> >> the remote device is pre-paired.
>
> >> private boolean doTestConnection() {
>
> >> Log.d("SwxBtCommImpl", "doTestConnection");
>
> >> String btAddr = "00:08:1B:CA:C7:29";
>
> >> BluetoothDevice btdev =
> >> BluetoothAdapterImpl.getInstance().getRemoteDevice(btAddr);
>
> >> // widcom using the following GUID
> >> // 00001101-0000-1000-8000-00805F9B34FB
> >> UUID uuid = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB");
>
> >> try {
> >> BluetoothSocket btsocket =
> >> btdev.createRfcommSocketToServiceRecord(uuid);
>
> >> btsocket.connect();
> >> Log.d("SwxBtCommImpl", "connected");
>
> >> try {
> >> Thread.sleep(1000);
> >> } catch (InterruptedException e1) {
> >> // TODO Auto-generated catch block
> >> e1.printStackTrace();
> >> }
>
> >> InputStream instream = btsocket.getInputStream();
> >> Log.d("", "getInputStream");
>
> >> byte[] data = new byte[512];
> >> for (int i = 0; i < 20; i++) {
> >> int numOfAvailable = instream.available();
>
> >> Log.d("SwxBtCommImpl", "read " + i + ": " + numOfAvailable + "
> >> bytes");
> >> if(numOfAvailable > 0) {
> >> int numOfRead = instream.read(data);
> >> Log.d("SwxBtCommImpl", new String(data) + "-" + numOfRead);
> >> } else {
>
> >> try {
> >> Thread.sleep(500);
> >> } catch (InterruptedException e) {
> >> // TODO Auto-generated catch block
> >> e.printStackTrace();
> >> }
> >> }
> >> }
>
> >> instream.close();
> >> instream = null;
>
> >> btsocket.close();
>
> >> } catch (IOException e) {
> >> // TODO Auto-generated catch block
> >> Log.e("", "bt connection failed", e);
> >> }
>
> >> return true;
> >> }
--
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en