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

时间:2014-02-13 17:27:57

标签: android bluetooth xamarin.android xamarin android-bluetooth

当应用程序通过A2DP或Hands Free Profile启动时,我们需要我们的应用程序能够自动连接到配对的蓝牙设备。

我们正在使用Xamarin(monodroid),适用于Android平台。

我发现了这个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,这证明了它是可能的。

3 个答案:

答案 0 :(得分:1)

请记住,Xamarin与原生api绑定,所以不要担心某些事情与本地方式有关" ;)基于你引用的anwser我编写并测试了下面的代码。我希望它会对你有所帮助。

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);

只是看了一下约会..但是我还是在发帖回答 - 也许它仍然会帮助某人

答案 1 :(得分:0)

您可以查看此blog post。此链接中的adapter.BondedDevices属性将返回已配对设备的列表。

答案 2 :(得分:-1)

在Xamarin示例中有一个原生的Java示例程序及其类似物:http://docs.xamarin.com/samples/BluetoothChat/