Articles of rfcomm

Android蓝牙IOException:连接被拒绝

好的,这是交易。 我有两个启用蓝牙的Galaxy Nexus手机。 我写了一个蓝牙连接pipe理应用程序,用于设备发现和连接。 它还输出设备可以支持的所有可用的UUID。 从http://www.bluetooth.org/Technical/AssignedNumbers/service_discovery.htm看 ,以下标准UUID是从Galaxy Nexus设备公开的。 0x1116 – NAP 0x112f – PBAP(电话簿访问configuration文件) 0x111f – HFP(免提) 0x1105 – OPP(对象推送configuration文件) 0x1112 – HSP(耳机configuration文件) 0x110c – AVRCP 0x110a – A2DP 我试图通过OPPconfiguration文件( UUID 00001105-0000-1000-8000-00805F9B34FB )连接并在设备之间推送对象(文件)。 我已经去了整个Android API文档 ,如何发现,配对/绑定(线程等)和pipe理所有的蓝牙连接。 我已经设法通过SPP(0x1101)configuration文件成功连接并与传统主板设备通话。 然而,当我尝试使用两个银河联系电话之间的socket.connect() ,配对对话框显示出来,我点击两个设备上的Pairbutton。 之后,我立即得到一个Connection Refused IOException 。 请注意,配对发生后,我再也不会再问到什么是有道理的,因为安全链接被caching。 如果我无法使用这些标准UUID连接到这些标准configuration文件,为什么它们暴露? 如何从我的应用程序连接到这些configuration文件中的任何一个并与它们交互? 是否因为我的应用程序不是某种可信的? 奇怪的是,即使Android上的Sharefunction也根本不起作用。 这是什么东西在Android上完全破碎? 请避免给我提示使用“众所周知的UUID SPP一个0x1101”像文档说。 这不是我想要的。 我对这个东西是如何工作有一个相当好的理解,我正在寻找一个真正的解决scheme或问题的解释。 我已经看到了典型的“反思”解决scheme,但我不明白为什么这仍然是Android上的问题? 为什么人们使用反思来完成这项工作? […]

Android蓝牙:软件导致连接中止IOException?

可能重复: 官方原因“软件导致连接中止:套接字写入错误” 我有BluetoothChat问题,我不能连接Droid。 我总是得到这个IOException 08-09 20:58:24.889: INFO/BluetoothChat(17378): MESSAGE_STATE_CHANGE: 3 08-09 20:58:51.053: DEBUG/BluetoothService(17378): BT_SEND_MESSAGE 08-09 20:58:51.108: ERROR/BluetoothService(17378): disconnected 08-09 20:58:51.108: ERROR/BluetoothService(17378): java.io.IOException: Software caused connection abort 08-09 20:58:51.108: ERROR/BluetoothService(17378): at android.bluetooth.BluetoothSocket.readNative (Native Method) 08-09 20:58:51.108: ERROR/BluetoothService(17378): at android.bluetooth.BluetoothSocket.read(BluetoothSocket.java:286) 08-09 20:58:51.108: ERROR/BluetoothService(17378): at android.bluetooth.BluetoothInputStream.read(BluetoothInputStream.java:96) 08-09 20:58:51.108: ERROR/BluetoothService(17378): at java.io.InputStream.read(InputStream.java:133) 08-09 20:58:51.108: ERROR/BluetoothService(17378): at my.test.BluetoothChatService$ConnectedThread.run(BluetoothChatService.java:356) 我怎么解决这个问题?

蓝牙sockets冻结手机

我正在开发Android的应用程序。 这个应用程序应该与蓝牙(BT)设备(发送一些字节)进行通信。 我在我的设备(Samsung Galaxy mini)上debugging/运行此应用程序时遇到问题。 当我创build一个BT套接字并停止debugging时,电话会冻结,我必须通过取出电池重新启动它。 在运行这个应用程序的情况下(从Eclipse)一切正常,但是当我尝试再次运行它,电话冻结和应用程序未安装。 如果我尝试在第二次运行之前卸载此应用程序,请再次冻结手机。 这是一个有问题的代码: private final BluetoothDevice mmDevice; private UUID uuid; public ConnectionThread(BluetoothDevice device) { Log.d(TAG, "create ConnectionThread"); uuid = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB"); BluetoothSocket tmp = null; mmDevice = device; try { tmp = mmDevice.createRfcommSocketToServiceRecord(uuid); } catch (IOException e) { } mmSocket = tmp; socketConnected = true; } 这是线程的构造函数。 当我评论这一行时 tmp = […]

Android蓝牙套接字冻结应用

我有一个蓝牙套接字奇怪的问题。 如果我创build套接字和后来closures应用程序,Android设备冻结非常高的CPU负载。 这里我的示例代码: // open socket public ConnectThread(final BluetoothDevice device) { Log.v(ConnectThread.class.getName(), "Try to get a socket"); try { this.socket = device.createRfcommSocketToServiceRecord(UUID.fromString("00001101-0000-1000-8000-00805F9B34FB")); } catch (IOException e) { Log.e(ConnectThread.class.getName(), e.getMessage()); } Log.v(ConnectThread.class.getName(), "Got a socket"); } // close it public void cancel() { try { Log.v(ConnectThread.class.getName(), "cancel"); this.socket.close(); } catch (IOException e) { Log.e(ConnectThread.class.getName(), e.getMessage()); } […]

蓝牙RFCOMM连接无法在Android 4.2上连续build立

我有一个应用程序通过蓝牙通过RFCOMM与自定义设备通话。 通信代码基于BluetoothTalk示例项目。 它在Galaxy S3,Galaxy S2,Galaxy Note和Nexus 7上运行之前没有任何问题。 最近,Nexus 7升级到了Android 4.2,从那时起,问题如下: 当您第一次使用应用程序build立连接时,意味着设备刚启动,应用程序刚刚启动,没问题,您可以正常获取数据。 然后,如果您停止通信,并尝试重新启动,则通信将失败,并显示错误“java.io.IOException:bt socket closed,read return:-1”。 从那以后,不pipe你尝试重新连接多less次,总是失败。 再次使用它的唯一方法是,如果您重新启动自定义设备和应用程序,然后尝试连接,通信正常。 但是,一旦停止并重新开始通信,它就会一直失败。 我借用了Android 4.2的Nexus 4,问题依然存在。 这真的很烦人,因为我们的设备的主要价值是依靠蓝牙RFCOMM应用程序。 我仔细检查了有关在Android 4.2的BT文档,并没有看到任何重大的变化。 我对自己的代码非常有信心,因为它适用于任何不运行4.2的Android设备 任何暗示或build议将不胜感激。 该设备需要在十二月初演示,我们真的想尽快解决这个问题。 编辑:现在,4.2.1已经发布,问题仍然没有解决。 我们至less可以得到一些关于它是否在工作的确认,并且很快就会被解决吗?

在Android中通过蓝牙接收audio

我想创build一个能够接收audiostream的Android应用程序。 我想使用A2DPconfiguration文件,但似乎Android不支持A2DP接收器。 看起来好像有很多人在为这个问题寻找解决scheme。 但是接收一个普通的比特stream,然后在应用程序中将数据转换为audio呢? 我正在考虑通过RFCOMM(SPP蓝牙configuration文件)接收PCM或Mp3数据stream,然后使用AudioTrack进行播放。 首先,如何通过RFCOMM在Android手机上接收比特stream? 是否有可能通过RFCOMM作为PCM或Mp3stream接收比特stream? 其次,如果无法通过RFCOMM接收比特stream作为PCM或Mp3stream,那么如何将接收到的比特stream转换为audio? 第三,如何将接收到的数据转换为audio并同时“实时”播放audio? 我可以使用onDataReceived吗? 要清楚,我不感兴趣的使用A2DPconfiguration文件! 我想通过RFCOMM(SPP蓝牙configuration文件)stream式传输数据。 接收到的数据stream将以PCM或Mp3格式。 我想写自己的应用程序,但如果有人知道一个应用程序来解决这个问题,我会很高兴听到! 我正在使用Android 2.3姜饼。 /约翰尼

蓝牙RFCOMM / SDP连接到Android的RS232适配器

我正在尝试使用Google提供的Bluetooth Chat示例API应用程序来连接到连接到其他设备的蓝牙RS232适配器。 这里是应用程序的参考: http://developer.android.com/resources/samples/BluetoothChat/index.html 这里是RS232连接器的规格表仅供参考: http://serialio.com/download/Docs/BlueSnap-guide-4.77_Commands.pdf 那么问题是,当我去连接到设备: mmSocket.connect(); (BluetoothSocket::connect()) 我总是得到connect()方法抛出的IOException错误。 当我做一个toString的exception,我得到“服务发现失败”。 我的问题主要是什么情况下,会导致IOException抛出连接方法? 我知道那些在源代码中,但我不知道如何编写应用程序的Java层和包含实际堆栈接口的C / C ++层。 我知道它使用蓝色的C / C + +编写的蓝牙栈,但不知道如何绑定到Java层,这是我认为是抛出exception。 任何帮助指出我可以尝试解决这个问题的地方是不可思议的。 也只是为了说明我能够与RS232适配器配对就好,但我永远不能实际连接。 这里是更多参考的logcat输出: I / ActivityManager(1018):显示的活动com.example.android.BluetoothChat / .DeviceListActivity:326ms(总计326ms) E / BluetoothService.cpp(1018):stopDiscoveryNative:StopDiscovery中的D-Bus错误:org.bluez.Error.Failed(无效的发现会话) D / BluetoothChat(1729):onActivityResult -1 D / BluetoothChatService(1729):连接到:00:06:66:03:0C:51 D / BluetoothChatService(1729):setState()STATE_LISTEN – > STATE_CONNECTING E / BluetoothChat(1729):+恢复+ I / BluetoothChat(1729):MESSAGE_STATE_CHANGE:STATE_CONNECTING I / BluetoothChatService(1729):BEGIN mConnectThread […]

如何在没有用户input的情况下创buildAndroid RFCOMM套接字?

这是一个场景: 我需要编写一个Android应用程序来创build一个带蓝牙适配器的PC的RFCOMM套接字(我也要写服务器)。 我的要求是,用户不必手动配对设备。 其实,有一个很大的破解,我正在使用createInsecureRfcommSocket 。 一个小场景 :我有一个Android应用程序,它与打开RFCOMM套接字的Linux机箱交换信息。 我可以在设备上手动设置PIN(硬编码是一个选项) 我正在寻找不同的道路: 写一个JNI包装器 正如Max Kellermann所做的那样,我可以编写一个JNI层来完成所有的配对阶段。 这应该是一个不错的select,但有一个问题: NDK 4b不提供libbluetooth库,所以-lbluetooth失败,以及NDK v.3。 选项: findNDK 1.5(包括lib蓝牙)。 经过几天的networkingsearch,我一直无法find答案。 任何人有或知道我在哪里可以find它? 为我自己编译libbluetooth for Android,并将它们用于-lbluetooth。 那里没有幸运,我无法build立它们。 任何提示? 使用API​​公开的东西 任何人都知道如何使用createRfcommSocketToServiceRecord并让用户不要手动配对设备? 可能吗? 我应该如何编写服务器? 我不知道的东西 也许(当然!)有一些我不知道的东西。 也许我可以使用别的东西? 不是RFCOMM? SDP? 也许我可以手动与Android API配对? 我希望已经清楚,如果不是只是问。 再一次,因为这不是第一次,我在你的手中:) 感谢所有的支持人员!