我正试图通过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,那么这整个练习毫无意义,因为无论如何我都无法获得O设备的MAC地址。此外,如果我无法在不询问用户许可的情况下进行配对,那么重点是什么?只需打开一个已知BT MAC地址的套接字就可以自动启动配对过程,并且(假设我甚至知道它)可以通过任意/专有的NFC消息发送
对此的任何帮助都将非常感激,因为Android NFC文档在这一点上绝对无用,我设法找到的每个在线示例都很古老,或者假设BluetoothAdapter.getAddress()仍然返回有效地址< / p>
答案 0 :(得分:0)
Android 9+不允许获取本地蓝牙适配器的MAC地址(这真是愚蠢,实际上,这完全没有意义,这里的安全性/隐私增益微乎其微,而UX受到了严重伤害),因此,您可以在不对MAC地址进行硬编码的情况下,无法执行经典的NFC到BT切换(SSP),这意味着您无法做到。
这是Google的一个可怕举动,使他们也放弃了“ Android Beam”(同样,通过NDEF SSP进行NFC> BT移交)。
Google现在想出了“ NearBy Share”应用来代替“ Anrdoid Beam”,但由于它依赖于极慢的Android“ NearBy” API,它也非常慢(发现和连接需要10秒!)。 / p>
与仅需3-4秒的Apple AirDrop相比,这是一场灾难,Google可能有一天会发现这一点,并恢复这一民粹主义决定。