【发布时间】:2014-02-13 17:27:56
【问题描述】:
当应用程序通过 A2DP 或免提配置文件启动时,我们需要我们的应用程序能够自动连接到配对的蓝牙设备。
我们正在为 Android 平台开发 Xamarin (monodroid)。
我发现了这个 stackoverflow 问题:Programmatically connect to paired Bluetooth device
但它与实现此目的的本地方式有关(请参阅 kcoppock 的回答)。我想知道是否有办法通过 Xamarin 实现这一目标。我们可以连接到 SPP 端点,因为它是基于 RFCOMM 的连接,但我们需要它和音频连接,因此我们正在寻找一种连接到 A2DP 的方法。
更新 1:
我们尝试使用CreateInsecureRfcommSocketToServiceRecord 方法连接,如下所示:
mmSocket = device.CreateInsecureRfcommSocketToServiceRecord(0000110A-0000-1000-8000-00805F9B34FB);
mmSocket.Connect();
在调用 Connect 时,我们收到一个错误:
read failed, socket might closed or timeout, read ret: -1
堆栈跟踪开始于:
Java.IO.IOException at Android.Runtime.JNIEnv.CallVoidMethod (IntPtr jobject, IntPtr jmethod) [0x00062] in /Users/buil…
更新 2:
顺便说一句,当我们尝试使用 the approach by kcoppock 通过本机 java 测试应用程序进行连接时,连接代码似乎可以正常工作,尽管该设备并未作为 A2DP 耳机连接。
我们见过的唯一能够做到这一点的编程方式是this Google Play app,这证明了它是可能的。
【问题讨论】:
-
其中一个原因可能是您的程序的另一部分正在打开连接(提取器)应该读取的同一文件?
-
在连接点,我认为我们只有通过 RFComm 的 SPP 连接,但我们的主要任务是同时通过 SSP 和 A2DP 连接 Android 设备。如果我们从代码连接到 SPP 并通过 Android 设置手动连接到 A2DP,一切正常,因此这证明从技术上讲我们可以同时连接两个配置文件。
-
这可能是带宽问题。检查您的特定设备的波特率以及您正在流式传输的音频量。显然,如果您接近极限,则 rfcomm 通道将失败。
标签: android bluetooth xamarin.android xamarin android-bluetooth