蓝牙连接问题

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

9 个解决方案

#1


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

#2


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

#3


我用setPin()来自动配对的

#4


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

#5


引用 2 楼 id19870510 的回复:
你调用 createBond 这个方法进行配对的时候都会收到一个 确认配对的对话框

进行配对,只能通过手动来进行,不可能通过代码是实现配对,因为安全性的问题不能通过应用程序自动的来进行配对,一旦配对成功就可以进行文件的传输了。

#6


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

#7


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

#8


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

#9


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

谢谢,我现在暂时也用这个方法在做

#1


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

#2


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

#3


我用setPin()来自动配对的

#4


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

#5


引用 2 楼 id19870510 的回复:
你调用 createBond 这个方法进行配对的时候都会收到一个 确认配对的对话框

进行配对,只能通过手动来进行,不可能通过代码是实现配对,因为安全性的问题不能通过应用程序自动的来进行配对,一旦配对成功就可以进行文件的传输了。

#6


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

#7


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

#8


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

#9


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

谢谢,我现在暂时也用这个方法在做