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

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (40)

我想知道是否有办法通过Xamarin来实现这一点。我们可以连接到SPP端点,因为它是一个基于RFCOMM的连接,但我们需要这个连接和音频连接,所以我们想要连接到A2DP。

我们尝试使用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…

提问于
用户回答回答于

你可以使用此链接中的媒体资源将返回已配对设备的列表。

用户回答回答于

请记住,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);

扫码关注云+社区