我是 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/