android - Android 真的支持蓝牙 OOB 配对吗?

标签 android bluetooth nfc

我是 Android 世界的新手。如果我的问题太天真,请原谅我。

我一直在开发一个示例应用程序来实现 Linux Box(运行 Bluez-5.42 的 FC-21)和 Android 平板电脑之间的蓝牙配对。我正在使用 NFC 将蓝牙名称、地址和 OOB 数据从 PC 传输到 Android。 我能够通过 NFC(准确地说是光束)将上述数据从 PC 发送到 Android,并且能够在 Android 端解析和解码所有数据。 有了 Android 上可用的 Linux box 的蓝牙地址,我可以调用 CreateBond() 将 Android 平板电脑与 Linux Box 配对。我已经测试了这部分,它按预期工作。

现在,这种方法的问题在于,在蓝牙配对过程中使用了数字比较或密码输入关联模型,我认为这是用户使用 NFC 进行配对时的体验偏差。 由于我已经有了 PC 的 OOB 数据,我想使用 OOB 关联进行配对,这样用户体验就不会受到影响。

为此,当我将 CreateBond() 替换为 CreateBondOutOfBand() [使用反射] 时,没有配对请求从 Android 发送到 Linux PC。

       try {
        showLog("Pairing started");
        Method m = bDev.getClass().getMethod("createBondOutOfBand", byte[].class, byte[].class);
        showLog("Found method");
        Boolean flag = (Boolean) m.invoke(bDev, Hash, Rand,(Object[]) null);
        //Method m = bDev.getClass().getMethod("createBond", (Class[]) null);
        //Boolean flag = (Boolean) m.invoke(bDev, (Object[]) null);
        if(flag)
            showLog("Pairing successfully finished.");
        else
            showLog("Pairing failed");
    } catch (Exception e) {
        showLog("Pairing failed.");
    }

我在网上搜索过,但没有找到任何具体证据表明 OOB 配对可以在 Android 中实现。

此外,为了检查原生 Android 的行为,我使用 Linux 盒子的蓝牙名称、地址和 OOB 数据创建了一个 NFC 标签。当我拿着标签对着安卓平板电脑时,蓝牙配对开始了,但它仍然没有使用 OOB 关联模型。

我的问题如下,

  • Android 真的支持 OOB 关联模型吗?
  • 如果支持 OOB 关联模型,CreateBondOutOfBand() 是 要使用的 API 还是我需要使用的任何其他 API?

如有任何意见,我们将不胜感激。

谢谢,

最佳答案

根据 this ,

Android 9 introduces new restrictions on the use of non-SDK interfaces, whether directly, via reflection, or via JNI. These restrictions are applied whenever an app references a non-SDK interface or attempts to obtain its handle using reflection or JNI.

由于 createBondOutOfBand() 和 removeBond() 对公众隐藏 documentation ,这些方法从Android 9开始被限制。使用反射调用这些方法会导致异常。

关于android - Android 真的支持蓝牙 OOB 配对吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41603450/

相关文章:

android - 我如何读取 ISO15693 标签 UID

java - Android Studio Ble Gatt 连接将数据写入自定义服务特征

objective-c - Mac OS X 蓝牙编程示例?

ios - 使用 iPhone 读取 Mifare Classic 标签

Android Webview通过设置token cookie自动登录https网站

android - 使用蓝牙 [Android] 打开远程设备文件管理器

java - 需要 WinForm 应用程序与 Nexus 7 通信 - 没有合适的 NFC 读卡器

android - 在 Android API 1.5 上使用 SAX 解析器 (javax.xml.parsers.SAXParser) 解析引号时出现问题

Android studio Firebase 依赖与 appcompat 不兼容

android - 在可拖动的 gridview 中获取错误以在 android 中进行垂直滚动