我正在尝试通过蓝牙连接两个未配对的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 causes pairing dialog on Android 4.2无关,只有在服务记录不存在时才会发生这种情况。
我认为在它出现的设备上无法避免这个对话框(如果可以的话,解释如何做到这一点是一个有效的答案)。出于这个原因,我想知道什么时候出现这样的对话框。我没有在Android Java源代码中找到任何东西(它本身很快就会出现)。我怀疑它与蓝牙版本有什么关系,因为Ace有蓝牙2.1,它应该支持所需的“正常工作”连接。
如果有任何东西可以让我检测设备是否支持连接而不弹出对话框,或者它是否明确固定到某个Android版本,那将极大地帮助我。
另外,我正在寻找一种轻松exclude such devices的方法。
答案 0 :(得分:3)
目前我和你有同样的问题。我开发了一个在BT终端之间交换消息的应用程序,我在不同的手机上测试它(我有S3,S2,S plus,Nexus One和Galaxy Y)来分析行为。电话有这个规格:
据我所知,根据我的经验,S2和S3在一段时间后开始显示配对对话框,即使它们已经配对并交换数据。这种情况一直发生在我的测试平台中包含这两部手机中的一部,其他工作正常并且从不要求配对(尤其是具有完美行为的Nexus One)。
我已经进行了长时间的测试(从4到6小时),我仍然无法弄清楚为什么这些手机有时会在3小时后要求配对..有时在10分钟后。
我唯一想指出的是,即使你使用不安全的连接,你仍然可以被要求进行人工互动以进行配对。看一下(取自http://en.wikipedia.org/wiki/Bluetooth):
正常工作:正如名称所暗示的那样,这种方法才有效。没有用户 需要互动;但是,设备可能会提示用户 确认配对过程。此方法通常由耳机使用 具有非常有限的IO功能,并且比固定的更安全 PIN机制,通常用于此集合的传统配对 有限的设备。这种方法不提供中间人(MITM) 保护。