我正试图通过蓝牙连接两个未配对的android设备,用于P2P网络。不需要MitM保护。Android为此提供了createInsecureRfcommSocketToServiceRecord
和listenUsingInsecureRfcommWithServiceRecord
(自API 10级起),这在现代设备上非常适用。然而,在Galaxy Ace(Android 2.3.3=API 10级,连接Galaxy Nexus)上,它会创建一个配对对话框。这种情况发生在传入和传出连接上。(更新:将Galaxy Ace更新到Android 2.3.6显然解决了这个问题。是否有特定的Android版本总是/从不这样做?)
接受配对后,连接正常。因此,我认为这与Issue 40101无关:createInsecureRfcommSocketToServiceRecord在Android 4.2上导致配对对话框,只有在服务记录不存在的情况下才会发生。
我认为这个对话框在出现的设备上是无法避免的(如果可以的话,解释如何做到这一点是一个有效的答案)。因此,我想知道什么时候会出现这样的对话框我在Android Java源代码中没有找到任何东西(它很快就变成了原生代码)。我怀疑这与蓝牙版本有任何关系,因为Ace有蓝牙2.1,它应该支持所需的"正常工作"连接。
如果有什么可以让我在不弹出对话框的情况下检测设备是否支持连接,或者它是否明确固定为某个android版本,这将对我有很大帮助。
此外,我正在寻找一种轻松排除此类设备的方法。
目前我和你有同样的问题。我已经开发了一个在BT终端之间交换消息的应用程序,我正在不同的手机上测试它(我有S3、S2、S plus、Nexus One和Galaxy Y),以分析行为。手机有以下规格:
- 三星S2:自定义ROM(Android v4.2.1)-根
- 三星S3:股票ROM(安卓v4.1.2)
- 三星S+:自定义ROM(Android v4.1.2)-根
- 三星GY:自定义ROM(安卓v2.3.6)-根
- Nexus One:股票ROM(Android v2.3.6)-根
根据我的经验,S2和S3在一段时间后开始显示配对对话框,即使它们已经配对并交换数据。这种情况经常发生,我把这两部手机中的一部放在我的测试台上,其他的都很好,从不要求配对(尤其是Nexus one,它的行为完美无瑕)。
我已经进行了长时间的测试(从4到6个小时),但我仍然不明白为什么这款手机有时会在3个小时后要求配对。。有时在10分钟之后。
我唯一想指出的是,即使你使用的是不安全的连接,你仍然可能被要求进行人类互动以配对。看一看(取自http://en.wikipedia.org/wiki/Bluetooth):
Just works:正如名称所暗示的,这种方法确实有效。无用户需要互动;但是,设备可能会提示用户确认配对过程。这种方法通常用于耳机具有非常有限的IO能力,并且比固定的更安全此集合通常用于传统配对的PIN机制有限设备。这种方法不提供中间人(MITM)保护