当应用程序通过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,这证明了它是可能的。
答案 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/