如何让我的应用通过 NFC 发送蓝牙配对请求
Posted
技术标签:
【中文标题】如何让我的应用通过 NFC 发送蓝牙配对请求【英文标题】:How to get my app to send Bluetooth pairing request via NFC 【发布时间】:2018-10-08 01:23:14 【问题描述】:我正在尝试通过 NFC 将两个 android 设备 (M & O) 与蓝牙配对,并且在经过数周的谷歌搜索、反复试验和更多谷歌搜索之后,现在才设法让它部分工作。目前,当发送以下 NDEF 消息时,我已成功配对设备:
// Kotlin code where the 0x7F's are replaced with the sender's BT MAC in little-endian order
val msg = NdefMessage(NdefRecord.createMime("application/vnd.bluetooth.ep.oob", byteArrayOf(0x08, 0x00, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F)));
这只是因为我在 NDEF 记录中硬编码了 BT MAC 地址。在 M 设备上,我可以通过编程方式获取 MAC,但这对 O 设备没有好处。此外,这种方法需要用户许可,我认为以前的工作示例完全绕过了用户
无论如何,我的问题是:
有没有办法让 Android 代表我生成配对请求,因为它知道蓝牙 MAC 地址但我不知道(或者至少不会在我自己的设备上) 如果是这样,这是否意味着不再要求用户确认配对?如果我无法让 Android 发送 MAC,那么整个练习就毫无意义,因为无论如何我都无法获得 O 设备的 MAC 地址。另外,如果我在不征求用户许可的情况下无法配对,那有什么意义呢?只需打开一个连接到已知 BT MAC 地址的套接字即可自动启动配对过程,并且(假设我什至知道)可以通过任意/专有 NFC 消息发送
对此的任何帮助将不胜感激,因为 Android NFC 文档在这一点上绝对没用,而且我设法找到的每个在线示例都是古老的,或者假设 BluetoothAdapter.getAddress() 仍然返回有效地址
【问题讨论】:
【参考方案1】:Android 9+ 不允许获取本地蓝牙适配器 MAC 地址(愚蠢的是,真的,完全没有意义,这里的安全/隐私增益几乎没有,用户体验受到严重伤害),因此,您可以'不要在没有硬编码 MAC 地址的情况下进行经典的 NFC 到 BT 切换 (SSP),这意味着你不能这样做。
这是谷歌的一个可怕举措,这使得他们也放弃了“Android Beam”(因为它做了同样的事情,NFC > BT 通过 NDEF SSP 移交)。
Google 现在想出了“NearBy Share”应用来取代“Anrdoid Beam”,但是由于它依赖于极其缓慢的 Android“NearBy”API,它也非常慢(发现和连接需要 10 秒!)。
与只需要 3-4 秒的 Apple AirDrop 相比,这是一场灾难,Google 可能有一天会发现这一点并恢复这一民粹主义的决定。
【讨论】:
以上是关于如何让我的应用通过 NFC 发送蓝牙配对请求的主要内容,如果未能解决你的问题,请参考以下文章