gpt4 book ai didi

android - Android上的蓝牙 "out of band"(OOB)配对了吗?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:29:52 25 4
gpt4 key购买 nike

我一直在搜索互联网,但是在如何完全实现OOB配对方面却一无所获。我希望这里的人可以指出一些示例代码来帮助我。 Android开发人员网站中的聊天示例并没有真正涉及这种类型的配对。

基本上,我有一个Android平板电脑,我想与一个用C++编写的,没有内置显示/IO机制的设备安全配对。要配对的平板电脑将充当GUI/IO界面,我将通过蓝牙向后发送消息和第四条消息。因此,我想通过OOB配对方案将平板电脑与每个设备安全地配对。

我了解OOB的概念,但是在android.developers.com网站上查找我的android客户端代码时,我很难找到合适的方法来调用。同样,在查看bluez内容时,我发现对于C++编写的服务器来说,还有很多事情要做。

基本用例是用户将通过USB连接将平板电脑连接到设备。 USB连接将有助于每个设备的 key /mac地址的传递,然后使该信息对与蓝牙相互使用。

我可以弄清楚USB部分,但是一旦有了客户端和服务器上的 key 和必要的信息,我似乎就无法找到正确的方法来调用两端以成功并安全地配对。

我已经有一个客户端/服务器通过不安全的连接进行交谈,因此,真正困扰我的唯一部分是两端的实际配对。配对后,我就可以使用secureRFComm来完成以后的所有消息传递。

最佳答案

我的问题已解决95%,但遇到了小障碍。首先,我将用对原始问题的更具体答案来更新此帖子,并在最后发布我的问题。

回顾一下,我的任务是使用带外(oob)配对通过USB将使用Honeycomb 3.2的android平板电脑安全地配对到beagle板上。我无法发布特定的代码,但是我将为您提供完成此操作所需的所有步骤。

在beagle板上,我安装了bluez 4.96堆栈,并安装了dbusoob插件。要确认此设置正确,请在beagle板上安装2个蓝牙加密狗,然后运行test文件夹中bluez文件中的OOB测试代码。这是一个python脚本。如果未设置bluez,脚本可能会成功配对2个蓝牙适配器。

要使平板电脑能够与USB通信,您需要安装mtpfs和mtp-tools。这些用于安装平板电脑。他们解决了在两台设备之间获取OOB信息的方式,就是将平板电脑安装在beagle板上。安装后,平板电脑和beagle板可以写出包含所需信息的文件。

在android方面,公共(public)API不支持OOB,所以事情变得棘手。我相信这是因为Honeycomb 3.2没有正式支持OOB绑定(bind)的bluez堆栈,但是Google已经编码了某种实现。我相信这是因为,如果您查看Bluetooth适配器和Bluetooth Device类的 Gingerbread 源代码,则可以请参阅可用的OOB方法,但未通过记录的API公开。

这些方法仍然是公共(public)的,因此您可以通过反射来调用它们。使用反射,您还可以获得类中的所有方法签名。这就是我找出可用的方法的方式。

请注意,尽管其中许多文件没有记录,并且某些文件的功能尚不明确。需要注意的重要方面是适配器类中的readOutOfBandData()和设备类中的setDeviceOutOfandData()。

当您将oob数据写入平板电脑上的文件以供beagle板读取时,您可能会遇到的另一个难题。由于android使用mtp,因此您必须在将文件写入内部sdcard存储设备后对文件进行索引。为了解决这个问题,您需要使用MediaScannerConnection类和scanFile()方法。

希望以上内容可以帮助其他任何人解决同样的问题。

现在我的问题。我的Android应用程序运行良好,beagle板代码已更新为testOOB示例,以使一端从文件中读取OOB信息。现在,我看到的问题是,执行该命令时,每个人都感觉很好,但是在平板电脑上,我仍然收到一条消息,询问是否要与设备xyz配对。没有键或数字。它只是询问“与设备XYZ配对”或类似的内容。

如果我按“pair”,那么从平板电脑的角度来看都是配对的,但是python脚本返回配对失败。 beagle板上的python脚本正在调用实际方法来进行设备之间的绑定(bind)。即使当我有android启动createBond调用时,我也会看到相同的结果。我可以保证在尝试在两种情况下进行配对之前,已经在两端都设置了必需的OOB数据,这样看来并非如此。

因此,我希望有人可以帮助我解决的问题是:

1)如果OOB数据正确交换,为什么我什至在Android上也收到一条消息?我还有另一个电话想念吗?在哪端?

2)即使我按了平板电脑上显示的“pair”弹出窗口,beagle board python脚本为什么仍返回配对失败,为什么?数位板和蓝色显示器都将设备显示为已配对。再次,我倾向于我缺少某些东西的想法。

感谢任何可以提供帮助的人:)

编辑:

要添加更多信息,这里是logcat输出:

D/UIBluetooth( 4363): !!!!!! Start Bond !!!!!!
D/BluetoothService( 1703): Setting out of band data for: 00:02:76:24:C2:8F:[-37, -1, 65, -42, -121, -75, -60, -4, -47, -86, -88, 14, 64, 83, 16, 96]:[-112, 34, 121, -97, 15, -54, -83, -
93, 104, -83, -124, -25, 89, 114, 66, 62]
D/BluetoothBondState( 1703): 00:02:76:24:C2:8F bond state 10 -> 11 (0)
D/UIBluetooth( 4363): createOobBond Successful
V/BluetoothEventManager( 2174): Received android.bluetooth.device.action.BOND_STATE_CHANGED
D/BluetoothEventLoop( 1703): Property Changed: Devices : 1
D/BluetoothEventLoop( 1703): Device property changed: 00:02:76:24:C2:8F property: Connected value: true
I/BluetoothEventLoop.cpp( 1703): agent_event_filter: Received method org.bluez.Agent:RequestOobData
I/BluetoothEventLoop.cpp( 1703): agent_event_filter: Received method org.bluez.Agent:RequestOobData

最后两行似乎正在触发Android上的弹出窗口,以与有问题的设备配对/取消。我想让Android知道自动绑定(bind),甚至不问。据我所知,我可能会错过一个电话或做一些困惑的事情。我在代码中所做的最后一件事是创建绑定(bind),这似乎是显而易见的地方。

感谢您的任何建议!

关于android - Android上的蓝牙 "out of band"(OOB)配对了吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6918262/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com