一开始以为“BluetoothDevice.ACTION_ACL_CONNECTED”是先蓝牙配对,然后2个设备连接成功后才会接收到这个信息,但在测试中发现在bonding时,就是还未配对成功的时候已经收到此消息,请问是怎么回事,怎么判断设备已连接?

解决方案 »

  1.   

    当2个设备蓝牙都开启,在bonding的时候会收到“BluetoothDevice.ACTION_ACL_CONNECTED“,无论setPin()中的密码是否正确,即无论配对是否成功都会收到,且connect成功的时候不会再发送这个消息。
    当被连接方没有开启蓝牙,在bonding的时候,则不会收到这个消息。
    当被连接方断开后又自动连接上(已经配对上,期间没有bonding),也会收到这个消息,这个消息应该是在connet成功的时候发送的。
      

  2.   

    你调用 createBond 这个方法进行配对的时候都会收到一个 确认配对的对话框 
      

  3.   

    你可以看看我对蓝牙操作写的文章
    http://www.cnblogs.com/menglin2010/archive/2011/11/02/2232923.html
      

  4.   

    自动配对是可以实现的,通过反射得到createBond和setPin方法,setPin方法就是自动输入pin。应该是考虑到你说的安全性问题,所以这些方法是隐藏的。
      

  5.   

    BluetoothDevice.ACTION_ACL_CONNECTED这个广播不表示配对成功或连接成功,它是在两个蓝牙设备建立RFCOMM通道时,就会发出这个广播
      

  6.   

    判断配对成功,可以通过BluetoothDevice.ACTION_BOND_STATE_CHANGED这个广播实现
    判断连接成功,目前我也没有发现较好的方法,但可以间接实现。配对成功后我们会调用socket的connect()方法来连接连个蓝牙设备,这块我们可以添加一个try catch处理,如果连接成功,程序一定会走到这句话之后,反之就一定会抛出异常