如何让我的应用通过NFC

时间:2018-04-27 08:26:15

标签: android bluetooth nfc android-bluetooth pairing

我正试图通过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()仍然返回有效地址< / p>

1 个答案:

答案 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可能有一天会发现这一点,并恢复这一民粹主义决定。