在Android上从Xamarin连接到配对的蓝牙设备

当应用程序通过A2DP或免提configuration文件启动时,我们需要我们的应用程序能够自动连接到配对的蓝牙设备。

我们正在为Xamarin(monodroid),Android平台工作。

我发现这个stackoverflow问题:以编程方式连接到配对的蓝牙设备

但它涉及到实现这一目标的本地方式(请参阅kcoppock的答案)。 我想知道是否有方法通过Xamarin实现这一点。 我们可以连接到SPP端点,因为它是一个基于RFCOMM的连接,但是我们需要和audio连接,因此我们正在调用连接到A2DP的方法。

更新1:

我们尝试使用CreateInsecureRfcommSocketToServiceRecord方法来连接,如下所示:

mmSocket = device.CreateInsecureRfcommSocketToServiceRecord(0000110A-0000-1000-8000-00805F9B34FB); mmSocket.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:

顺便说一句,当我们尝试使用kcoppock的方法通过本机javatesting应用程序进行连接时,连接代码似乎工作没有错误,虽然设备没有作为A2DP耳机连接。

我们看到的唯一编程方式就是这个Google Play应用程序 ,这certificate这是可能的。

请记住,Xamarin绑定到本机的API,所以不要担心某些事情“与本地方式相关”;)基于您引用的anwser,我编写并testing了下面的代码。 我希望它会帮助你。

 class btListener : Java.Lang.Object, IBluetoothProfileServiceListener { public void OnServiceConnected([GeneratedEnum] ProfileType profile, IBluetoothProfile proxy) { String deviceName = "JABRA WAVE+"; BluetoothDevice result = null; var devices = BluetoothAdapter.DefaultAdapter.BondedDevices; if (devices != null) { foreach (BluetoothDevice device in devices) { if (deviceName == device.Name) { result = device; break; } } } var connect = Java.Lang.Class.FromType(typeof(BluetoothA2dp)).GetDeclaredMethod("connect", Java.Lang.Class.FromType(typeof(BluetoothDevice))); connect.Invoke((Java.Lang.Object)proxy, result); } public void OnServiceDisconnected([GeneratedEnum] ProfileType profile) { } } 

例如OnCreate函数中的代码如下:

 btListener btReceiver = new btListener(); BluetoothAdapter.DefaultAdapter.GetProfileProxy(this, btReceiver, ProfileType.A2dp); 

只是看date..但是我发布的答案无论如何 – 也许它仍然会帮助某人

你可以查看这个博客文章 。 此链接中的adapter.BondedDevices属性将返回已配对设备的列表。

在Xamarin示例中有一个本机java示例程序及其模拟: http : //docs.xamarin.com/samples/BluetoothChat/