没有用户确认的蓝牙配对

mic*_*ael 32 android bluetooth nfc

我可以通过蓝牙配对两台设备而无需在用户界面中确认,接受配对此设备.我可以通过NFC交换一些额外的数据,然后通过蓝牙安全地配对这两个设备而无需任何额外的用户操作吗?

Dev*_*red 54

这种需求正是为什么createInsecureRfcommSocketToServiceRecord()加入到BluetoothDeviceAndroid中2.3.3(API等级10)(起始SDK文档)......之前,有对此没有SDK的支持.它旨在允许Android连接到没有用户界面的设备来输入PIN码(如嵌入式设备),但它可用于在没有用户PIN输入的情况下在两个设备之间建立连接.

推论方法listenUsingInsecureRfcommWithServiceRecord()BluetoothAdapter用于接受这些类型的连接.这不是安全漏洞,因为这些方法必须成对使用.您不能使用它来简单地尝试与任何旧的蓝牙设备配对.

您还可以通过NFC进行短距离通信,但该硬件在Android设备上不那么突出.绝对选择一个,不要试图创建一个使用两者的解决方案.

希望有帮助!

PS在2.3之前的许多设备上还有一些方法可以使用反射来实现这一点,因为代码确实存在......但我不一定会推荐这种方法用于大规模分布式生产应用程序.请参阅此StackOverflow.

  • 你我的朋友是个天才.在我的代码中添加一个单词(如在createInsecureRfcommSocketToServiceRecord()中的"不安全")使我的传统蓝牙设备(GPS)立即工作.它不需要PIN码,因此安全连接无法正常工作. (3认同)

Fem*_*emi 6

那么,这应该分为两部分:

  1. 你可以在不经过蓝牙配对握手的情况下配对2台蓝牙设备吗?不,你不能.这已经融入了协议,所以没有办法解决这个问题.
  2. 你可以在没有用户界面的情况下进行握手吗?是的,你可以:那只是代码.

我不确定你是如何在Windows领域做到的,但是在*nix land中有一些功能隐藏在Bluez堆栈中,可以让你收到关于新设备何时出现的通知,然后发送配对代码(显然必须有)这些功能:那些是用户界面使用的).如果有足够的时间和经验,我相信你可以弄清楚如何以某种方式编写自己版本的蓝牙设置应用程序:

  • 检测到新设备已到达
  • 查看名称/蓝牙mac地址并检查一些内部数据库以查找要使用的配对代码.
  • 发送配对码并完成操作

所有这些都不需要弹出用户界面.

如果你继续写下我喜欢的代码,就可以了解它.