问题标签 [rfcomm]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
testing - 用于 SPP-RFCOMM 测试的 ADB 命令
我正在 Android 2.3.3 手机上进行蓝牙协议测试。我将处于 USB 调试模式的设备连接到我的 Windows 7 PC,使用 cmd 向设备发送命令。
问题:我无法弄清楚如何提交 SDP 查询。让我设置场景,测试用例:“验证 IUT 是否与测试仪中的模拟串行端口建立连接。IUT 是扮演 DevA 角色的设备。测试仪是接受器”... nb 测试仪是 android 设备 (IUT) 应该与之交谈的测试机器。
第一步,这是我卡住的地方:“使用 SDP 提交查询以找出远程设备中所需应用程序的 RFCOMM 服务器通道号。这可能包括让用户在可用端口中进行选择的浏览功能(或服务)在对等设备中。或者,如果确切知道要联系哪个服务,则使用与所需服务相关联的服务类 ID 查找必要的参数就足够了。
设备:股票-不知道如何root设备哈哈!没有超频。蓝牙 2.1 版本 1.0.46.0
到目前为止,我已经尝试了以下方法。输入 adb shell, rctest -u [BT address of test machine] ,有时我会得到“无法连接,正在进行中”或“无法连接到主机”,甚至不管是否运行测试用例。还尝试过:rctest -u [测试机的BT地址],它将无限期地等待通道10:S sdptest -i B:无法连接到SDP服务:主机已关闭
我只是觉得我错过了一些阻碍我进一步进步的大事。
任何帮助将不胜感激。担
android - Android蓝牙IOException:连接被拒绝
好吧,这就是交易。我有两部启用蓝牙的 Galaxy Nexus 手机。
我编写了一个蓝牙连接管理应用程序,用于设备发现和连接。它还输出设备可以支持的所有可用 UUID。
从http://www.bluetooth.org/Technical/AssignedNumbers/service_discovery.htm 查看以下标准 UUID 从 Galaxy Nexus 设备中公开。
- 0x1116 - 午睡
- 0x112f - PBAP(电话簿访问配置文件)
- 0x111f - HFP(免提)
- 0x1105 - OPP(对象推送配置文件)
- 0x1112 - HSP(耳机配置文件)
- 0x110c - AVRCP
- 0x110a - A2DP
我正在尝试通过 OPP 配置文件 ( UUID 00001105-0000-1000-8000-00805F9B34FB
) 连接并在设备之间推送对象(文件)。我已经阅读了有关如何发现、配对/绑定(线程等)和管理所有蓝牙连接的整个Android API 文档。我已经设法通过 SPP (0x1101) 配置文件成功连接并与旧版板设备通信。
但是,当我尝试socket.connect()
在两部 Galaxy nexus 手机之间使用时,会出现配对对话框,然后我单击Pair
两部设备上的按钮。之后,我立即得到一个Connection Refused IOException
. 请注意,在配对发生后,我再也不会被问到,这是有道理的,因为安全链接已被缓存。
如果我无法使用这些标准 UUID 连接到这些标准配置文件,为什么它们会暴露?如何从我的应用程序连接到任何这些配置文件并与它们交互?是因为我的应用程序不受信任吗?奇怪的是,即使是Share
Android 上的功能也根本不起作用。这在 Android 上完全被破坏了吗?
请避免像文档说的那样提示我使用“众所周知的 UUID SPP 一个 0x1101”。这不是我想要的。我对这些东西的工作原理有相当好的理解,我正在寻找一个真正的解决方案或问题的解释。
我已经看到了典型的“反射”解决方案,但我不明白为什么这在 Android 上仍然是一个问题?为什么人们使用反射来完成这项工作?我们可以在 Android 上提交一个错误来解决这个问题吗?
如果这些 UUID 是标准的,那么任何应用程序都应该能够连接它们并与之交互。为什么这是一个问题,为什么我会得到这个异常?
提前致谢。
更新
因此,出于某种原因,Android 系统中的对象推送开始起作用。我实际上试图通过我的应用程序进行连接,但它无法正常工作。然后,我去了联系人应用程序并尝试分享一个神奇的联系人。然后,我回到我的应用程序,现在它可以工作了......哇。这很奇怪,必须对此进行解释。
python - Python:将套接字绑定到 /dev/rfcommX
我有一个脚本,它通过串行端口在嵌入式设备上加载固件。该脚本将串口的 /dev/xxx 地址作为参数。我有一个特殊的设置,我通过蓝牙执行此操作。我设法通过蓝牙连接到 python 中的模块。但是,我找不到任何有关如何在 /dev/rfcomm0 等串行设备中注册本地套接字的示例/信息。
这里我需要一些方法在 /dev/rfcomm0 注册 server_sock
android - 修改 android.server.BluetoothService.java 以更新配对设备的缓存 service_channel_no 以打开与其的多个连接(在多通道上)
我被困在我的 Android 手机(三星 Galaxy)必须打开 2 个(或更多)连接到我的 PC(服务器)的地方,这是一个配对设备。为此,我在 PC 上使用 UUID 启动 SDP 服务器:00001101-0000-1000-8000-00805F9B34FB 和通道 2,在第一次连接后,我在 PC 上取消注册 SDP 服务并在通道 3 上再次注册(和相同的 UUID)并期望我的 android 手机“连接”到它以建立第二个蓝牙连接。第二个失败。
我发现的问题是,由于配对,“BluetoothSocket.connect”设备的通道编号和 UUID 是从缓存中提供服务的,并且没有被更新,所以我在服务器端的通道编号中的 SDP 发生了变化此处不可见,因为它仍在尝试连接到通道 2(旧通道)。
这个问题的解决方法(经过多次令人沮丧的尝试后发现)可能是通过在 getRemoteServiceChannel() 和 fetchRemoteUuids() 返回之前引入 updateDeviceServiceChannelCache(addr) 来更改 android.server.BluetoothService.java 文件,以便更新每个函数调用的通道号。
上述解决方案很可能是错误的,请原谅我。如果正确,请提出任何进一步的更改以及如何在 Eclipse 中使此更改永久化,或者在其他情况下(错误的解决方案),正确的方法。
注意:我有 android 2.3.5,来自设备的请求实际上来自我转发到 PC 的浏览器。我希望他们在不同的频道上。
谢谢。
android - Android 4.2 无法连续建立蓝牙 RFCOMM 连接
我有一个应用程序,它通过蓝牙通过 RFCOMM 与自定义设备通信。通信代码基于BluetoothTalk示例工程。它之前在 Galaxy S3、Galaxy S2、Galaxy Note 和 Nexus 7 上都可以正常运行。
最近,Nexus 7 升级到 Android 4.2 之后,问题出现如下:
首次使用app建立连接时,即设备刚开机,app刚启动,没问题,可以正常获取数据。
然后,如果您停止通信并尝试重新启动,则通信失败并出现错误“java.io.IOException: bt socket closed, read return: -1”。从那时起,无论您尝试重新连接多少次,它总是会失败。
让它再次工作的唯一方法是,如果您重新启动自定义设备和应用程序,然后尝试连接,通信就会正常。但是,一旦您停止并重新启动通信,它就会继续失败。
我借了一台装有 Android 4.2 的 Nexus 4,但问题仍然存在。
这真的很烦人,因为我们设备的主要价值是依赖于蓝牙 RFCOMM 应用程序。我仔细检查了 Android 4.2 中关于 BT 的文档,没有发现任何重大变化。我对自己的代码相当有信心,因为它适用于任何不运行 4.2 的 Android 设备
任何提示或建议将不胜感激。该设备需要在 12 月初进行演示,我们真的很想尽快解决这个问题。
编辑:现在 4.2.1 已经发布,但问题仍未解决。我们至少可以确认它是否正在工作并且很快就会修复吗?
android - Android 在 RFCOMM 套接字上发送数据
我正在将蓝牙医疗设备与我的 Android 应用程序连接起来。所以,我创建了一个通信通道 RFCOMM(SPP 协议),因为医疗设备允许 SSP 通信协议。设备指南为我提供了在 SPP 协议上发送的命令结构。例如 0x02 0x70 0x04 0x0A 表示一个简单的 4 字节命令)。所以,我需要发送这样的命令(符合 SPP 协议)。
创建后,BluetoothSocket
我以这种方式获取输入和输出流(按照此链接):
为了发送从十六进制序列 0x02 0x70 0x04 0x0A 表示的命令,我该怎么办?
android - Android:蓝牙 UUID 如何工作?
我不明白蓝牙 UUID 表示什么。UUID 是否表示协议(例如RFCOMM)?如果是这样,为什么这些createRfcommSocketToServiceRecord()
方法需要 UUID,当它们在其名称中指定 rfcomm 时?为什么 BluetoothChat 示例代码有一个看似任意的硬编码 UUID?
出现我的问题是因为,根据这个问题,当运行 4.0.4 的设备尝试使用反射连接(到外部的非 Android 设备)时,我得到一个空指针异常。但是,该问题的解决方案对我不起作用。UUID muuid = device.getUuids()[0].getUuid();
引发异常。
编辑:我已经通过根据这个答案(使用UUID.fromString("00001101-0000-1000-8000-00805f9b34fb");
)硬编码串行端口服务的 UUID 解决了这个问题。
我对为什么我需要提供一个 UUID 来使用createInsecureRfcommSocketToServiceRecord(),
但不使用反射方法来创建不安全的 rfcomm 套接字感到更加困惑。
任何人都可以理顺我吗?
android - 与 RFCOMM 设备配对的 Android 无法连接
首先,我不得不说,我是 android 的初学者。我正在开发一个应用程序,它应该通过蓝牙连接到没有任何操作元件(无按钮、无显示器)的测量仪器并接收测量数据。不幸的是,我对测量仪器和制造商也不太了解。我所知道的是,我必须通过 RFCOMM 进行通信,当我与 android 配对时,我必须将序列号作为 PIN (09000) 发送。到目前为止,这有效。Andorid 与设备配对。尝试连接时,它首先建立连接,然后几秒钟后中断。我正在使用三星 Galaxy S3 和 HTC Sensation。
在这里你可以找到我完整的蓝牙连接类:
http://iukp.chefti.com/JAVA/AndroidBluetooth.java
这是 logcat 输出以供更多参考:
任何提示或建议将不胜感激。对不起,我的英语不好。
c - 传输端点未连接 bluez
传输端点未连接
我使用了来自http://people.csail.mit.edu/albert/bluez-intro/x502.html的代码。我将其修改为使用 c 的文件函数通过蓝牙传输一个 8 mb 的大文件。我收到错误“传输端点未连接”怎么办?