使用不安全的 RFCOMM 蓝牙套接字时,android 何时显示配对对话框?

Posted

技术标签:

【中文标题】使用不安全的 RFCOMM 蓝牙套接字时,android 何时显示配对对话框?【英文标题】:When does android show a pairing dialog when using insecure RFCOMM bluetooth sockets? 【发布时间】:2013-02-11 00:30:30 【问题描述】:

我正在尝试通过蓝牙连接两个未配对的安卓设备以实现 P2P 网络连接。不需要中间人保护。 android 为此提供了createInsecureRfcommSocketToServiceRecordlistenUsingInsecureRfcommWithServiceRecord(从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 的方法。

【问题讨论】:

对于不安全的连接,即如果您使用 createInsecureRfcommSocketToServiceRecord 和 listenUsingInsecureRfcommWithServiceRecord,您使用的 UUID 是什么? @krisDrOid:随机生成的自定义。 【参考方案1】:

目前我和你有同样的问题。我开发了一个应用程序来在 BT 终端之间交换消息,我正在不同的手机(我有 S3、S2、S plus、Nexus One 和 Galaxy Y)上对其进行测试以分析行为。手机具有以下规格:

Samsung S2:自定义 ROM (Android v4.2.1) - 已root 三星 S3 : Stock ROM (Android v4.1.2) Samsung S+:自定义 ROM (Android v4.1.2) - 已root Samsung GY:自定义 ROM (Android v2.3.6) - 已植根 Nexus One:Stock ROM (Android v2.3.6) - 已植根

据我的经验,S2 和 S3 会在一段时间后开始显示配对对话框,即使它们已经配对并交换数据。这种情况一直发生在我将这两款手机中的一款包含在我的测试平台中,其他手机工作正常并且从不要求配对(特别是 Nexus One,它的行为完美无瑕)。

我已经进行了长时间运行测试(从 4 到 6 小时),但我仍然无法弄清楚为什么这款手机有时会在 3 小时后要求配对……有时会在 10 分钟后要求配对。

我想向您指出的唯一一件事是,即使您使用不安全的连接,您仍然可能会被要求进行人工交互以进行配对。看看那个(取自http://en.wikipedia.org/wiki/Bluetooth):

有效:顾名思义,此方法有效。没有用户 需要互动;但是,设备可能会提示用户 确认配对过程。此方法通常由耳机使用 IO 能力非常有限,并且比固定的更安全 该组通常用于传统配对的 PI​​N 机制 有限的设备。此方法不提供中间人 (MITM) 保护。

【讨论】:

谢谢。据说某些 Android 4.x 版本存在一个错误,如果其他设备没有运行/侦听相应的服务,则会触发此类对话框 - 请参阅this report。您可能需要检查您的听众是否保持活跃。 感谢您提供的信息,但是是的,我的服务一直在运行:)。也许我找到了问题所在,现在我正在努力。如果我的解决方案有效,我会更新我的帖子。 这有什么更新吗?我假设这只是 Lollipop 中的一个错误,但如果您在您的应用中找到了解决方法或问题的根源,我会非常有兴趣了解它。

以上是关于使用不安全的 RFCOMM 蓝牙套接字时,android 何时显示配对对话框?的主要内容,如果未能解决你的问题,请参考以下文章

无需打开插座即可连接蓝牙设备

我可以使用 RFCOMM 蓝牙协议在 iOS 设备和另一台设备之间共享数据吗?

如何让蓝牙 RFCOMM 始终如一地工作?

蓝牙的rfcomm和spp都是串口的协议,他们之间有啥区别呢?

13.3.1 QBluetoothSocket类介绍

如何从蓝牙套接字捕获错误并打印自定义消息?