- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我一直在搜索互联网,但是在如何完全实现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上的蓝牙 "out of band"(OOB)配对了吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6918262/
我最近在/ drawable中添加了一些.gifs,以便可以将它们与按钮一起使用。这个工作正常(没有错误)。现在,当我重建/运行我的应用程序时,出现以下错误: Error: Gradle: Execu
Android 中有返回内部存储数据路径的方法吗? 我有 2 部 Android 智能手机(Samsung s2 和 s7 edge),我在其中安装了一个应用程序。我想使用位于这条路径中的 sqlit
这个问题在这里已经有了答案: What's the difference between "?android:" and "@android:" in an android layout xml f
我只想知道 android 开发手机、android 普通手机和 android root 手机之间的实际区别。 我们不能从实体店或除 android marketplace 以外的其他地方购买开发手
自Gradle更新以来,我正在努力使这个项目达到标准。这是一个团队项目,它使用的是android-apt插件。我已经进行了必要的语法更改(编译->实现和apt->注释处理器),但是编译器仍在告诉我存在
我是android和kotlin的新手,所以请原谅要解决的一个非常简单的问题! 我已经使用导航体系结构组件创建了一个基本应用程序,使用了底部的导航栏和三个导航选项。每个导航选项都指向一个专用片段,该片
我目前正在使用 Facebook official SDK for Android . 我现在正在使用高级示例应用程序,但我不知道如何让它获取应用程序墙/流/状态而不是登录的用户。 这可能吗?在那种情
我在下载文件时遇到问题, 我可以在模拟器中下载文件,但无法在手机上使用。我已经定义了上网和写入 SD 卡的权限。 我在服务器上有一个 doc 文件,如果用户单击下载。它下载文件。这在模拟器中工作正常但
这个问题在这里已经有了答案: What is the difference between gravity and layout_gravity in Android? (22 个答案) 关闭 9
任何人都可以告诉我什么是 android 缓存和应用程序缓存,因为当我们谈论缓存清理应用程序时,它的作用是,缓存清理概念是清理应用程序缓存还是像内存管理一样主存储、RAM、缓存是不同的并且据我所知,缓
假设应用程序 Foo 和 Eggs 在同一台 Android 设备上。任一应用程序都可以获取设备上所有应用程序的列表。一个应用程序是否有可能知道另一个应用程序是否已经运行以及运行了多长时间? 最佳答案
我有点困惑,我只看到了从 android 到 pc 或者从 android 到 pc 的例子。我需要制作一个从两部手机 (android) 连接的 android 应用程序进行视频聊天。我在想,我知道
用于使用 Android 以编程方式锁定屏幕。我从 Stackoverflow 之前关于此的问题中得到了一些好主意,并且我做得很好,但是当我运行该代码时,没有异常和错误。而且,屏幕没有锁定。请在这段代
文档说: android:layout_alignParentStart If true, makes the start edge of this view match the start edge
我不知道这两个属性和高度之间的区别。 以一个TextView为例,如果我将它的layout_width设置为wrap_content,并将它的width设置为50 dip,会发生什么情况? 最佳答案
这两个属性有什么关系?如果我有 android:noHistory="true",那么有 android:finishOnTaskLaunch="true" 有什么意义吗? 最佳答案 假设您的应用中有
我是新手,正在尝试理解以下 XML 代码: 查看 developer.android.com 上的文档,它说“starStyle”是 R.attr 中的常量, public static final
在下面的代码中,为什么当我设置时单选按钮的外观会发生变化 android:layout_width="fill_parent" 和 android:width="fill_parent" 我说的是
很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或夸夸其谈,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开,visit the help center . 关闭 9
假设我有一个函数 fun myFunction(name:String, email:String){},当我调用这个函数时 myFunction('Ali', 'ali@test.com ') 如何
我是一名优秀的程序员,十分优秀!