问题标签 [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.
android - Android:具有多个 UI 活动(多线程/处理程序)的蓝牙 SPP 应用程序的一般方向
我对 Android 比较陌生,但对 Java 有一些经验。与蓝牙相比,这可能更像是一个多线程/处理程序问题。
我正在编写一个具有多个按钮布局的应用程序。我已经为按钮设置了 onClickListners。一些按钮将改变活动并使用新按钮显示新布局,而其他按钮将通过蓝牙发送传出的 SPP 字符串。字符串将在 XML 文件中定义并且不会更改(串行命令)。我可以硬编码蓝牙服务器的 MAC 地址,只需要发送数据,不需要接收。
我正在寻找一些关于设置蓝牙连接和传出传输方向的一般指导。我已经广泛查看了 BluetoothChat 示例,但在多个活动的情况下没有任何好的资源。
- 我是否使用单独的活动来管理所有蓝牙传输和连接,并为我要发送蓝牙消息的每种情况创建处理程序?- 我是否应该在每个活动中添加蓝牙连接+传输线程(似乎我会在更改活动时遇到丢失连接的问题)?- 我可以使用不是特定于类的处理程序,BluetoothService 活动可以发送活动/当前活动提示的任何内容吗?- 我可以硬编码要在蓝牙服务活动中发送的所有字符串,并且 UI 活动可以提示蓝牙服务活动根据按钮单击发送请求的字符串吗?
任何信息将不胜感激。只是一个大方向、小样本或班级建议会让我朝着正确的方向前进。
谢谢,
乔纳森
android - 一次可以创建多个 RFCOMM 通道吗?
问题:
一次可以创建多个 RFCOMM 通道吗?
测试方法:
创建从手机(三星 GALAXY S)到 PC 中的两个终端的连接。PC 有两种不同的蓝牙设备(内置和 USB 加密狗)并使用不同的 COM 端口,例如 COM1 和 COM2。
脚步:
使用 SPP 分别测试从手机到 PC 中不同蓝牙设备的每个连接。----> 好的,手机可以使用每个蓝牙设备读取PC在终端中发送的内容。这意味着 PC、蓝牙设备 1(BD1)、蓝牙设备 2(BD2) 通过 SPP 工作正常。现在,我将同时测试两个连接。
建立一个连接,比如手机-> BD1。---> 好的。手机可以使用此连接从 PC 中的终端 1 读取数据。
2.1 建立另一个连接(手机-> BD2)。---> 好的。不抛出异常,链接建立成功。
问题:
一旦建立了第二个连接,我在终端 1 中输入的内容将被转发并由第二个连接接收。另一方面,在终端 2 中键入的连接 2 将不会收到任何数据。
讨论我在这里 粘贴我的错误报告。如果我是对的,蓝色字体部分是建立第一次连接的过程,而蓝色字体下方的黑色字体是建立第二次连接的过程。
我怀疑“可以建立多个 RFCOMM”的原因是在错误报告中,我把它用粗体字体表示。我们可以看到他们都在使用“ rc chan 1 ”,这是否意味着他们使用相同的 RFCOMM?
非常欢迎任何推荐或建议!
android - 如何在没有用户输入的情况下创建 Android RFCOMM 套接字?
这是场景:
我需要为 Android 编写一个应用程序来为带有蓝牙加密狗的 PC 创建一个 RFCOMM 套接字(我也将编写服务器)。
我的要求是用户不必手动配对设备。
实际上,通过一个大技巧,我正在使用createInsecureRfcommSocket。
一个小场景:我有一个 Android 应用程序,它与打开了 RFCOMM 套接字的 Linux 机器交换信息。我可以在设备上手动设置 PIN(硬编码是一个选项)
我正在寻找不同的道路:
编写 JNI 包装器
正如 Max Kellermann在这里所做的那样,我可以编写一个 JNI 层来完成所有配对阶段。这应该是一个不错的选择,但是有一个问题:
NDK 4b 不提供 libbluetooth 库,因此 -lbluetooth 以及 NDK v.3 都失败了。
选项:
- 找到 NDK 1.5(包括 lib 蓝牙)。经过几天的网络搜索,我一直无法找到。任何人有或知道我在哪里可以找到它?
- 自己为 Android 编译 libbluetooth 并将它们用于 -lbluetooth。那里没有运气,我无法建造它们。有什么提示吗?
使用 API 公开的内容
任何人都知道如何使用createRfcommSocketToServiceRecord并让用户不要手动配对设备?是否可以?我应该如何编写服务器?
我不知道的东西
也许(当然!)有些事情我不知道。也许我可以用别的东西?不是RFCOMM?社会民主党?
也许我可以手动与 Android API 配对?
如果不只是问的话,我希望已经足够清楚了。再说一次,因为这不是第一次,我在你手中:)
感谢所有小伙伴的支持!
java - Android 蓝牙套接字冻结应用程序
我对蓝牙插座有一个奇怪的问题。如果我创建套接字并稍后关闭应用程序,Android 设备会因 CPU 负载非常高而冻结。
这是我的示例代码:
尽管我用close()
方法关闭了套接字,但我不明白为什么我的应用程序关闭后 Android 设备会冻结。请注意,它仅创建了套接字,但未连接...
编辑:
好的,有示例代码:
并记录:
从日志中可以看到,socket 成功关闭。现在,退出应用程序(它将在后台运行),运行到任务管理器并杀死应用程序。在那一刻,android 设备将因 CPU 负载非常高而冻结。
编辑2:
我发现,该问题仅在三星 GALAXY Tab 设备上重现。例如,我无法用我的 HTC Desire 重现它。
android - 安卓 2.2。如何设置串口(com,rfcomm)端口?
我试图将我的 Nexus One 与 Android 版本 2.2.1 与我的电脑连接,并使用终端程序(如 windows 终端或超级终端)进行通信。为此,我相信我需要设置一个传出串行 com 端口。我已配对设备。当我在我的电脑上转到蓝牙 - > 设置 - > “添加 com 端口”时,android 设备不显示。
我错过了什么?
android 2.2.1 是否支持 spp?文档说确实如此。
我需要root android来添加spp吗?
有人成功了吗?
我的最终目标是编写一个与需要 com 端口的老式蓝牙设备通信的 android 应用程序?让 android 与 pc 通信是一个临时步骤。
我已经尝试了我在我的 android 应用程序中能想到的一切来连接我的 pc 和 android 设备,但没有成功。我的 android 应用程序与xCaffiniated 提交的 Serial over Bluetooth基本相同,但评论较少。有什么建议么?
android - Android 多个 SPP / RFCOMM 连接导致严重减速
我有一个使用蓝牙 SPP (RFCOMM) 与硬件进行通信的应用程序。该应用程序和蓝牙连接工作得很好。问题是当另一个应用程序启动时,它也使用 SPP,然后其中一个应用程序停止。一旦任何一个应用程序停止,无论是通过退出应用程序还是使用任务杀手,手机都会减速到几乎停止。大多数时候我必须拉电池。
我在 Pandora 和我的应用程序中看到了这一点,它使用 SPP,可能作为其福特同步支持的一部分。我在 SPP 的示例应用程序中也看到了这一点。我使用哪些应用程序并不重要。使用 SPP 的任何两个应用程序都会导致此问题。
我在 ATT 上的 Android 2.1、HTC 设备上看到了这个。我在运行 2.2.1 库存的摩托罗拉 Droid 上没有看到这一点,但是我在使用自定义内核运行 2.2 和 LFY 1.95 ROM 时确实在同一部手机上看到了这一点。
如果有人需要查看它们,我有来自调试器的日志,但我没有看到任何指出问题的地方。一旦任一 SPP 应用程序停止,就会立即开始减速。我仍然收到日志,但没有任何迹象表明存在问题。在手机重新启动之前,减速不会停止。
android - 是否有任何实现蓝牙 spp 配置文件的实际 android 手机
有谁知道实际支持蓝牙 SPP 配置文件的当前 Android 手机?我在网上花了好几天的时间试图找到一个,但我在任何地方都没有看到任何说他们支持 SPP 配置文件的手机。此外,我注意到人们无法让他们的应用程序正常工作的各种帖子,因为他们使用的手机不支持 SPP 配置文件,或者他们的手机已禁用它。我在这里错过了什么吗?在我承诺为 Android 开发我的蓝牙应用程序之前,我想确保它确实可以完成。
我希望答案是我们通过蓝牙 API 实现 SPP 配置文件,因此我们可以在任何支持它的 Android 操作系统级别(即 2.0 或更高版本)上使用 RFCOMM。这个对吗?
android - 是否可以使用 RFCOMM API 编写自定义 AT 命令来使用蓝牙耳机
像通过 AT 指令切换电台频道
linux - 如何在 Linux 上始终连接到同一个 rfcomm 端口?
我有几个我试图在 Linux 中连接的蓝牙设备。除了一个之外,我对任何设备都没有问题。不同之处在于所有其他设备以(我假设的)标准方式处理它们的蓝牙连接,即它们等待主机设备(PC)启动连接。另一方面,另一台设备每隔几秒就会尝试启动连接,中间有大约一秒钟的睡眠时间。
对于其他设备,我一直是这样连接的:
(其中 X 是任何未使用的 rfcomm 端口号)
在发出此命令之前,我使用所需的配对密钥运行蓝牙代理。这里的一切都很好。
对于有问题的设备,这在设备配对之前第一次效果很好。然而,在配对之后,rfcomm connect 命令很可能会失败。这是因为设备本身正在尝试初始化连接。当设备处于睡眠状态时,连接失败(“主机关闭”)。
相反,我发现,对于这个设备,下面的命令就像一个魅力:
(我必须先通过 sdptool add SP 添加一个串口)
由于 PC 将坐在那里等待来自设备的传入连接,因此每次都有效。
但是,当我拥有多个设备时,问题就出现了。rfcomm listen 命令运行良好,但似乎没有办法控制哪个设备(由 Mac 地址标识)连接到哪个 rfcomm 端口;如果打开了多个设备,那么第一个尝试连接的设备将连接,无论如何。然而,在我们的应用程序中,我们希望用户知道他们正在连接哪个设备。
以前有没有人处理过这样的事情?我们正在考虑编写 bluez 蓝牙包的自定义版本,因此我们将不胜感激任何帮助:)
android - 如何让蓝牙 RFCOMM 始终如一地工作?
我正在尝试构建一个 Android 应用程序,该应用程序将通过蓝牙串行端口配置文件 (SPP) 与外部 GPS 接收器连接。我正在使用运行 2.3.3 的 Nexus One。我已经设法让我的应用程序从 GPS 接收数据,但我有两个问题:1)当我连接到设备时,它只在某些时候有效。有时连接只是超时,有时它说设备正忙或正在使用中。2)我无法弄清楚如何将数据发送回设备,这可能是我如何使用流的问题,因为传入的流是阻塞调用。
我只是将相关代码移动到一个新的 Android 应用程序中进行测试,如下所示:
/res/layout/main.xml(两个按钮和一个文本视图)
/src/com.example.bluetoothspp/MainActivity.java
我发现使用正常的“bsocket = device.createRfcommSocketToServiceRecord(MY_UUID);” 方法通常会导致我出现“服务发现失败”消息,所以我也尝试了“bsocket = (BluetoothSocket) m.invoke(device, Integer.valueOf(1));” 方法。这更常见,但是当我尝试连接时喜欢超时。
我在这里做错了什么?